如何从COUNT()获得前10名和ORDER BY()

时间:2016-08-07 07:59:56

标签: sql

下图是我必须使用的数据库示例。

数据库还有更多字段 - userid直到USER-0050

我想要实现的是十大用户活动。根据上面的图像,所需的输出是:

User ID           Transaction
USER-005           14
USER-001           12
USER-002           12
USER-003           8
USER-004           6

到目前为止我尝试过:

SELECT DISTINCT (userid), count(TCODE) as Transaction
FROM SAP_SECURITY_LOG
GROUP BY TCODE, USERID

然而,我的输出并不是我想要达到的目标。我得到了

UserID    Transaction
User-001     0
User-001     1
User-001     2
User-001     3
User-001     6

基本上我想将所有这些合并在一起然后获得所有用户ID的前10个交易(所有50个用户ID)

感谢任何指导。我希望我想说的是有道理的 Image 1

我的输出:

Image 2

一直持续到用户-0050

3 个答案:

答案 0 :(得分:2)

热门活跃用户:

SELECT Top(10) userid, count(TCODE) as Transaction
FROM SAP_SECURITY_LOG
GROUP BY userID
ORDER BY count(TCODE) DESC

答案 1 :(得分:2)

  • 您可以将ORDER BYDESC(降序)结合使用来订购结果。
  • 您可以使用LIMIT将结果限制为特定金额,例如:LIMIT 10
  • 为了使您的代码更易于阅读(并且我们更容易提出建议),您希望与大写/小写一致(例如,对SQL关键字使用大写)。

因此,您可以使用ORDER BY transaction DESC LIMIT 10来达到理想的效果。

您的代码:

SELECT DISTINCT (userid), count(TCODE) as Transaction
FROM SAP_SECURITY_LOG
GROUP BY TCODE, USERID

您的代码使用我的建议:

SELECT userid, COUNT(tcode) as transactions_count
FROM sap_security_log
GROUP BY userid
ORDER BY transactions_count DESC LIMIT 10

我根据我的建议制作了一个工作示例,以便您查看查询的作用:http://sqlfiddle.com/#!9/2cc33/1/0

答案 2 :(得分:1)

您可以使用TOP

获取前十名用户
SELECT TOP  10 userid, count(TCODE) as Transaction
FROM SAP_SECURITY_LOG
GROUP BY  USERID
ORDER BY count(TCODE)  DESC ;