SQL: подсчет количества строк и возвращение всех строк с максимальным количеством: недопустимое использование групповой функции - PullRequest
1 голос
/ 08 апреля 2020

У меня есть эти таблицы:

репетиторы :

tutorid firstname, lastname...

курсы :

url  tutorid

рецензии :

review courseid

Мне нужно выбрать всех репетиторов, у которых больше всего отзывов. 1 репетитор = 1 курс Сначала я попытался выбрать курсы с наибольшим количеством отзывов:

select y.courseid, num from (select courseid,COUNT(reviews.rating) as num 
from reviews group by (reviews.courseid)) y;

При этом выбираются все URL-адреса и количество отзывов для каждого.

это

select y.courseid, MAX(num) from (select courseid,COUNT(reviews.rating) as num 
from reviews group by (reviews.courseid)) y;

будет отображать один курс с большинством обзоров - даже если есть другие курсы с таким же (максимальным) количеством отзывов - они не будут отображаться.

Я пытаюсь бороться с этим. Я попытался

select y.courseid, num from (select courseid,COUNT(reviews.rating) as num 
from reviews group by (reviews.courseid)) y
where num = MAX(num);

, но получил invalid use of group function ошибку.

РЕДАКТИРОВАТЬ : courseid - это URL-адрес курса. Поскольку в URL-адресе курса используется внешний ключ в таблице отзывов.

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

Вы можете создать столбец, который ранжирует рецензию в порядке des c и выбрать репетиторов с рангом = 1. Это будет выглядеть так:

Выбрать * из (Выбрать *, ранжировать () более ( упорядочить по num des c) в качестве ранга из таблицы) где rank = 1

Вы также можете использовать базу diff_rank при необходимости.

1 голос
/ 08 апреля 2020

Я бы попробовал это:

select distinct t.tutorid t.firstname, t.lastname
from (select courseid, count(reviews.rating) total
           from reviews
           group by courseid) r
left join courses c
on r.courseid = c.courseid
left join tutors t
on c.tutorid = t.tutorid
where r.total=(select max(total)
                         from  (select courseid, 
                         count(reviews.rating) total
                         from reviews
                         group by courseid) r 
                        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...