SQL-запрос, который находит имя определенной строки, которая имеет максимум связанных столбцов из другой таблицы - PullRequest
0 голосов
/ 24 марта 2019

Есть 2 таблицы:

   users: id, name
   albums: id, user_id

Мне нужен SQL-запрос, который находит ИМЯ пользователя, который имеет максимальное количество альбомов.Как я могу это сделать?

Вот что я пробовал до сих пор -

SELECT Users.name 
FROM Users 
JOIN Albums
ON Users.id = Albums.user_id 
HAVING  COUNT(Albums.id) = MAX(COUNT(Albums.id)); 

(это не работает)

Ответы [ 3 ]

1 голос
/ 24 марта 2019

Я бы просто использовал join, group by и limit:

SELECT u.name
FROM Users u JOIN
     Albums a
     ON u.id = a.user_id
GROUP BY u.name
ORDER BY COUNT(*) DESC
LIMIT 1;

Это делает некоторые предположения:

  • У разных пользователей нет одинаковыхназвание.Если это так, вы должны включить u.id в GROUP BY.
  • Если есть связи, то вам все еще нужен один ряд.
1 голос
/ 24 марта 2019

Вы можете использовать лимит 1

select   Users.name, count(distinct Albums.id) max_count
from  Users
INNER JOIN Albums on Users.id = Albums.user_id 
GROUP BY Users.name
ORDER max_count desc limit 1

или фильтр с максимальным числом для максимального числа

select   Users.name
from  Users
INNER JOIN Albums on Users.id = Albums.user_id 
GROUP BY Users.name
HAVING count(distinct Albums.id) = (
    select max(t.max_count) from (
    select   Users.name, count(distinct Albums.id) max_count
    from  Users
    INNER JOIN Albums on Users.id = Albums.user_id 
    GROUP BY Users.name
    ) t
)
0 голосов
/ 24 марта 2019

Этот подзапрос должен возвращать имя пользователя, имеющего максимальное количество альбомов.

SELECT name FROM Users WHERE id = (SELECT user_id FROM Albums GROUP BY user_id ORDER BY COUNT(*) DESC LIMIT 1);

Вот GROUP BY, используемая для группировки user_id с COUNT каждого вхождения user_id, в противном случае возвращает счетчик для всех записей в таблице.

Если существует несколько максимальных вхождений с одним и тем же счетчиком, вам нужно использовать ключевое слово IN для запроса, чтобы вернуть все имена, и запрос будет немного сложным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...