sql如何从每个用户的连接计数中获得前5名

sql如何从每个用户的连接计数中获得前5名,sql,Sql,这是我到目前为止的SQL代码: SELECT COUNT(*) OVER(), users.* FROM items LEFT JOIN users ON items.user_id = users.id ORDER BY COUNT LIMIT 5 我有两张桌子。用户和项目。用户可以有许多项。我试图找到哪个用户拥有最多的项目,并返回前几个 谢谢大家! 我试图找到哪个用户拥有最多的项目,并返回前几项[大概是项目] 您可以使用窗口功能为用户返回最多的所有项目: select i.* from (

这是我到目前为止的SQL代码:

SELECT COUNT(*) OVER(), users.*
FROM items
LEFT JOIN users
ON items.user_id = users.id
ORDER BY COUNT
LIMIT 5
我有两张桌子。用户和项目。用户可以有许多项。我试图找到哪个用户拥有最多的项目,并返回前几个

谢谢大家!

我试图找到哪个用户拥有最多的项目,并返回前几项[大概是项目]

您可以使用窗口功能为用户返回最多的所有项目:

select i.*
from (select i.*, max(cnt) over () as max_cnt
      from (select i.*,
                   count(*) over (partition by user_id) as cnt
            from items i
           ) i
     ) i
where cnt = max_cnt;

您可以使用以下选项,使用子选择来获取每个用户的项目数:

SELECT u.*, (SELECT COUNT(*) FROM items WHERE items.user_id = u.user_id) AS cnt
FROM users u
ORDER BY cnt DESC
LIMIT 5

您可以通过子查询执行此操作:

select * 
from (SELECT COUNT(i.user_id) cnt
             , u.*
      FROM users u
      LEFT JOIN Items i
      ON u.id = i.user_id
      group by id, name) A
order by cnt desc
LIMIT 5
注:

不要忘记将DESC放在您的order by子句中,因为:

如何从每个用户的加入计数中获得前5名

说明:

字母A只是子查询的别名。你想叫什么名字都行

演示:


样本数据、期望的结果和适当的数据库标记都会有所帮助。你的标题和你的问题不一样。嗨@Syn,在你向别人寻求帮助后,给出反馈将是一件非常好和正确的事情。以下是如何: