SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 12.05.2008 18:18:19

Nikooo
Участник
Зарегистрирован: 12.05.2008
Сообщений: 2

Выборка N значений из каждой группы

Здравствуйте!

Есть таблица
ID  grID  nm(не важно - произвольное поле, которое надо выбрать)
Нужно выбрать не более 3 (может быть меньше и даже ни одной) записей для каждого grID. Группы могут располагаться в таблице в произвольном порядкеКак справиться без union с этой задачей?

Код:

create table `mytab` (    `Id` double ,    `grID` double ,    `nm` varchar (30)); 
insert into `mytab` (`Id`, `grID`, `nm`) values('1','1','a'),('2','2','b'),('3','2','c'),('4','2','d'),('5','3','e'),('6','3','f'),('7','2','g'),('8','2','h'),('9','2','i'),('10','3','j'),('11','4','k'),('12','5','l'),('13','6','m'),('14','4','n'),('15','6','o'),('16','6','p'),('17','7','q'),('18','4','r'),('19','4','s');

Неактивен

 

#2 12.05.2008 18:30:24

Nikooo
Участник
Зарегистрирован: 12.05.2008
Сообщений: 2

Re: Выборка N значений из каждой группы

У меня пока получилось только что-то страшное:


set @sm=0,@vid=0,@cnt=3;
select * from (SELECT * FROM mytab ORDER BY grID) o2 WHERE
 if (@vid=grID,@sm:=@sm+1,(@sm:=0) OR (@vid:=grID)) AND @sm<@cnt
 


Пожалуйста, помогите упростить запрос (избавиться от подзапроса например)

Неактивен

 

#3 12.05.2008 20:24:49

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Выборка N значений из каждой группы

Вам удалось подзапросом реализовать функциональность курсора. Ваш запрос будет скорее всего быстрее, чем курсор. Более простой способ не знаю

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson