我有表'reports
',并且列有'Id
','authorId
'和其他更多列。那里有第二张表'users
',其中有[Id]
,[Nick]
等...
我想获取昵称和报告数量,我想获得最好的记录。
例如,
如果我将拥有三个报告数量最多的用户,我将得到 三个。
如果有8个用户的记录数最多,我将得到8个 用户。
可能会有非常简单的解决方案,但是我对此感到困惑。...
谢谢。
答案 0 :(得分:0)
您可以使用top with ties
语法:
SELECT TOP 1 WITH TIES nick, COUNT(*)
FROM users u
JOIN report r ON u.id = r.authoerId
GROUP BY nick
答案 1 :(得分:0)
在子查询的帮助下尝试使用此脚本-
SELECT U.ID
FROM Users U
INNER JOIN Report R ON U.ID = R.AuthorId
GROUP BY U.ID
HAVING COUNT(*) =
(
SELECT TOP 1 COUNT(*)
FROM Users U
INNER JOIN Report R ON U.ID = R.AuthorId
GROUP BY U.ID
ORDER BY COUNT(*) DESC
)
答案 2 :(得分:0)
分组并计数报告,然后将其与作者关联。要求按报告数降序排列“ TOP 1 WITH TIES”。 WITH TIES将确保所有并列第一的人都将被包括在内
SELECT TOP 1 u.Nick, R.ReportCount
FROM
Users U
INNER JOIN
(
SELECT AuthorID, COUNT(*) as ReportCount
FROM Report
GROUP BY AuthorID
) R
ON U.ID = R.AuthorID
ORDER BY R.ReportCount DESC
如果John,James和Jake都有500个报告,那么结果将是:
John, 500
James, 500
Jake, 500
如果杰克突然再做一个人,所以他是唯一的领导者,那么结果将是:
Jake, 501
TOP x WITH TIES接受x条记录,然后查看(报告计数)所订购的内容,并继续进行报告,其报告计数与要采取的LAST行相同
如果您的结果集为:
James, 503
Jake, 501
Jim, 500
John, 500
Julie, 500
Jeffrey 499
您问过TOP 3 WITH TIES,那么TOP 3是:
James, 503
Jake, 501
Jim, 500
我们对报告计数进行排序,上述3中的LAST行的报告计数为500,因此数据库将继续采用其他也有500作为报告计数的行:
James, 503
Jake, 501
Jim, 500
John, 500
Julie, 500