#sql #count #max
#sql #количество #макс
Вопрос:
Я пытаюсь вернуть ТОЛЬКО наивысший балл для КАЖДОЙ из нескольких групп в таблице SQL. На данный момент мой код выглядит следующим образом (col_1 и col_2 являются строками):
SELECT col_1,
col_2,
COUNT(col_2) as new_column
FROM table
WHERE col_1 = "some_condition"
GROUP BY col_2
ORDER BY count(col_2) DESC;
Я могу изменить условие, чтобы возвращать значения для всех баллов col_2 для каждого col_1, но я хочу ТОЛЬКО наивысший балл, потому что мне нужна таблица, в которой я могу сравнивать наивысший балл нескольких записей одновременно. Я пробовал использовать MAX, но вы не можете использовать MAX для вложения COUNT. Я видел другие ответы на подобные вопросы и пробовал эти решения, и они не работают из-за этого.
Что я могу сделать, чтобы вернуть только наивысший балл, который возвращается при подсчете?
Комментарии:
1. просто ограничьте свои результаты, т.Е. Включите
LIMIT 1;
в самом конце2. Группировать по col2, а затем count(col2)??
Ответ №1:
Вы можете использовать оконные функции:
SELECT t.*
FROM (SELECT col_1, col_2, COUNT(col_2) as new_column,
ROW_NUMBER() OVER (PARTITION BY col_2 ORDER BY COUNT(*) DESC) as seqnum
FROM table
WHERE col_1 = "some_condition"
GROUP BY col_2
) t
WHERE seqnum = 1;
Если вы хотите это для нескольких col_1
значений, вам может потребоваться скорректировать WHERE
предложение. Это из вашего запроса.
Комментарии:
1. Что делает «t.*»?
2. @Willy_Golden . , , Он выбирает все столбцы из подзапроса. Вы можете перечислить нужные вам столбцы. Это действительно недостаток, потому что эта часть запроса не особенно важна для отображения логики.