Возвращает наивысший балл после использования COUNT в SQL

#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 . , , Он выбирает все столбцы из подзапроса. Вы можете перечислить нужные вам столбцы. Это действительно недостаток, потому что эта часть запроса не особенно важна для отображения логики.