Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Добрый день.
Есть вот такая таблица:
id gruppa team points
1 A t1 10
2 A t2 9
3 B t3 8
4 B t4 7
Ну, тут уже отсортировано, но смысл такой, что нужно получить выборку по одной (а лучше заданной число) команде из каждой группы с максимальным количеством очков.
Т.е. из примера в выборку должны попасть:
1 A t1 10
3 B t3 8
distinct не очень подходит, т.к. довольно часто нужно выбрать более, чем одну команду из группы. В принципе, довольно просто разобрать массив на php, но хотелось бы решить это средствами MySQL.
Т.е. нужно, чтобы срабатывало условие, что если у нас из группы А уже выбрана команда, то не смотря на то, что она идет следующей, мы ее пропускаем.
Отредактированно Bust_Ed (25.11.2014 16:49:04)
Неактивен
Неактивен
Убрал rand, в принципе подходит, но для одной команды из группы.
А если мне нужно выбрать больше, чем одну команду?
Неактивен
Неактивен
Спасибо. Теперь есть другая проблема. Нельзя ли переменные задать в запросе SELECT, а не отдельным запросом? Хотя, вроде, я где-то так делал. Пойду поищу.
Неактивен
Можно,
select * from table, (select @a:=0, @b:='') x;
но если вы внимательно прочитаете окончание http://sqlinfo.ru/forum/viewtopic.php?id=1742 то придете к выводу, что лучше будет сделать х простых запросов в цикле.
Неактивен
vasya написал:
Можно,
select * from table, (select @a:=0, @b:='') x;
но если вы внимательно прочитаете окончание http://sqlinfo.ru/forum/viewtopic.php?id=1742 то придете к выводу, что лучше будет сделать х простых запросов в цикле.
Вы не поверите, но я это еще вчера сделал. Проблема в том, что у меня этот запрос делается к временной таблице. И, я так понимаю из-за этого, возникает ошибка can't reopen table. Так что мне это не поможет, только переменные. Хотя этот способ более подходящий.
Неактивен
Неактивен
select .. from
(select t.*, if(gruppa='A', @a:=@a+1, @a) a, if(gruppa='B', @b:=@b+1, @b) b from `table` t, (select @a:=0, @b:=0) x order by points desc) t1
where a<N or b<M;
где N и M кол-во команд, которые нужно выбрать из соответствующей группы.
P.S. Если не сработает, то приводите исходные данные в виде create table .., insert into .. и нужного результата.
Неактивен
Страниц: 1