Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.237.15.145] |
|
Данный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. |
Сообщ.
#1
,
|
|||||||||||||||||||||||||||||||||||||||||||
|
Имеется таблица вида
Необходимо выбрать строки в которых поле foo максимальное с группировкой по полю id_X, должно получиться нечто такое
Пробовал так SELECT * FROM table GROUP BY id_X ORDER BY foo DESC Но как я понял сначала идёт группировка, а потом уже сортировка, а как сделать наоборот, сначала сортировку а потом группировку? |
Сообщ.
#2
,
|
|
|
Привет!
Такой результат можно получить следующим запросом: SELECT t1.id_X, t1.foo, t1.bar FROM Table1 t1 INNER JOIN ( SELECT id_X, MAX(foo) AS max_foo FROM Table1 GROUP BY id_X ) t2 ON t1.id_X = t2.id_X AND t1.foo = t2.max_foo ORDER BY t1.id_X; Вот тут можно это проверить онлайн. |
Сообщ.
#3
,
|
|
|
Наша радость от Вашего посещения, не знает границ
|
Сообщ.
#4
,
|
|
|
Gonarh
Если версия MySQL - 8+, то WITH cte AS ( SELECT id_X, foo, bar, ROW_NUMBER() OVER (PARTITION BY id_X ORDER BY foo DESC) rn FROM sourcetable ) SELECT id_X, foo, bar FROM cte WHERE rn = 1; Если на (id_X, foo) в структуре НЕ наложено требование уникальности, то формально в таблице может оказаться несколько записей с одинаковым максимальным foo. Запрос Majestio в этом случае вернёт все эти записи. Мой - одну из них, причём случайную. Если нужна одна, но определённая, следует расширить выражение ORDER BY в определении окна и обеспечить уникальность с нужной сортировкой, чтобы возвращалась детерминированная запись. |
Сообщ.
#5
,
|
|
|
Цитата Akina @ Если на (id_X, foo) в структуре НЕ наложено требование уникальности Индекса уникального нет, но по сути оно будет уникальным. |
Сообщ.
#6
,
|
|
|
Gonarh
Индекса нет - значит, все заверения не более чем фикция, и дубликат когда-нибудь обязательно встретится. Как итог сбоя, ошибки или злонамеренного действия. И крайне глупо запихивать голову в песок и не учитывать такой ситуации. |