Sql 如何从COUNT()中获取前10名和ORDER BY()

Sql 如何从COUNT()中获取前10名和ORDER BY(),sql,Sql,下图是我必须使用的数据库示例 数据库中还有更多字段-userid一直到USER-0050 我想要实现的是前10名用户活动。根据上面的图像,所需输出为: User ID Transaction USER-005 14 USER-001 12 USER-002 12 USER-003 8 USER-004 6 到目前为止,我所尝试的: SELECT DISTINCT (useri

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

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

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

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
基本上,我希望将所有这些合并在一起,然后得到所有userid(所有50个userid)的前10个事务

感谢您的指导。我希望我想说的有道理

我的输出:

一直持续到user-0050

最活跃的用户:

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

您可以使用top获得前十名用户

SELECT TOP  10 userid, count(TCODE) as Transaction
FROM SAP_SECURITY_LOG
GROUP BY  USERID
ORDER BY count(TCODE)  DESC ;
  • 您可以结合使用
    ORDER BY
    DESC
    (降序)对结果进行排序
  • 您可以使用
    LIMIT
    将结果限制在一定的范围内,例如:
    LIMIT 10
  • 为了使您的代码更易于阅读(也便于我们提出建议),您需要与大写/小写保持一致(例如,对SQL关键字使用大写)
因此,您可以使用
orderbytransactiondesclimit 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

我用我的建议做了一个工作示例,以便您可以看到查询的作用:

您使用的是什么数据库(MySQl、Oracle等)并为不止一个用户添加示例数据和预期结果。我的数据库是在excel工作表中提供给我的,从那时起我就设法将其输入MS Access…如果这有帮助,我已经为多个用户添加了更多数据和预期结果。我不确定您试图实现什么。使用您提供的数据,您编写的结果是每个用户的事务id的总和。如果我理解正确,您希望前10名活动用户-交易最多的用户..追加订单方式。。。在您的查询中,在
选择之后添加
前10个
,OP应该会列出其所需的前10个用户活动…如果您已经使用
分组方式
,则不需要
进行区分。。。。。另外:如果你有
按TCODE分组,USERID
,你会得到OP显示的结果,而这不是他想要的。。。。。