Ошибка max (count (*)): как найти функцию max of count? - PullRequest
0 голосов
select room_id, count(distinct course_code) 
from "LearningActivity"  
group by room_id

enter image description here

Мне нужен только максимальный счет (отличный код курса). На фотографии вы видите в выводе, что у нас есть 3 строки, и я хочу показать только максимальное количество, которое является 3-й строкой с count=3. Любые идеи помогут, потому что я пытался поставить max(count(distinct course_code), но я получаю ошибку aggregate function calls cannot be nested

1 Ответ

2 голосов
/ 09 апреля 2020

Вы можете использовать LIMIT здесь:

SELECT room_id, COUNT(DISTINCT course_code) 
FROM LearningActivity
GROUP BY room_id
ORDER BY COUNT(DISTINCT course_code) DESC
LIMIT 1;

Это вернет room_id и его количество, соответствующее комнате с наибольшим отличным счетом.

Для более общего решение, которое охватило бы все комнаты с наибольшим количеством различных курсов, если есть 2 или более связанных, используйте RANK:

WITH cte AS (
    SELECT room_id, COUNT(DISTINCT course_code) AS cnt,
        RANK() OVER (ORDER BY COUNT(DISTINCT course_code) DESC) rnk
    FROM LearningActivity
    GROUP BY room_id
)

SELECT room_id, cnt
FROM cte
WHERE rnk = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...