SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 08.10.2010 16:40:52

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

сортировка внутри группировки

Не получается описать абстрактно задачу, поэтому напишу на примере.

CREATE TABLE item (
id INT,
cat INT,
votes INT,
created TIMESTAMP
);


Допустим SELECT id, votes, cat FROM item:

вилка     10    дом
ложка    5     дом
веник    3     дом
машина    7     улица
асфальт    2     улица
ножик    4    дом
трава    9    улица


По каждой теме нужно выбрать запись с наибольшим количеством баллов, т.е. чтобы было

вилка     10    дом
трава    9    улица


Насколько я помню, такое сдедлать нельзя. Но вдруг я ошибаюсь...

Неактивен

 

#2 08.10.2010 17:43:51

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: сортировка внутри группировки

Ну, ты же сам всё знаешь wink

Стандартное предложение —

SELECT * FROM item i JOIN(SELECT MAX(votes) votes, cat FROM item GROUP BY 2) s ON
i.votes = s.votes AND i.cat = s.cat;

Ну и стандартная бага реализации — если у тебя будет два дома 10, то будет две строки.

Неактивен

 

#3 11.10.2010 13:20:48

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: сортировка внутри группировки

Да, что-то такое в голове вертелось, но отметалось, т.к., все же, количество баллов плохо подходит для использования в качестве уникального ключа smile

Что ж, придется делать свой запрос на каждую запись из cat..

Неактивен

 

#4 11.10.2010 15:54:42

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: сортировка внутри группировки

Плохо подходит. Но и формулировка задачи плохая. Из-за этого все проблемы.

Неактивен

 

Board footer

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