2016-08-07 20 views
2

下面的圖片是我與之合作的數據庫的一個例子。如何從COUNT獲得前10名和ORDER BY()()

有更多的領域到數據庫 - 用戶ID去,直到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 

基本上我想合併在一起所有這些,然後讓

任何指導表示讚賞(所有50個用戶ID)的所有用戶ID的前10名交易。我希望我想說的是有道理的 Image 1

我的輸出:

Image 2

保持下去,直到用戶-0050

+1

什麼數據庫你正在使用(MySQl,Oracle,...) –

+2

並且還爲不止一個用戶添加示例數據和預期結果。 –

+0

我的數據庫是給我的一個Excel工作表,並從那時候我已經成功地進入它的MS Access ...如果這能幫助 我添加更多的數據和預期的結果爲多個用戶 – aofe1337

回答

2

最活躍的用戶:

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

在「SELECT」後面添加一個「TOP 10」,OP將列出所需的前10名用戶活動... –

1

您可以使用TOP

0123獲得排名前十位的用戶
SELECT TOP 10 userid, count(TCODE) as Transaction 
FROM SAP_SECURITY_LOG 
GROUP BY USERID 
ORDER BY count(TCODE) DESC ; 
+0

如果您已經使用了GROUP BY,則不需要DISTINCT ..... plus :如果你有'GROUP BY TCODE,USERID',你會得到OP顯示哪些結果是** NOT **他要找的結果..... –

+0

@marc_s。正確..謝謝..答案已更新 – scaisEdge

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