2011-04-14 16 views
3

我擁有大量用戶的數據庫,記錄他們居住的地點以及他們登錄網站的次數。我正在尋找每個城市中最活躍的用戶。查詢從表格中的組中選出最高的10個值或最高的10%

我知道如何找到一個最活躍的用戶在每個城市:

select user_id, city, max(login_count) 
from user 
group by city 

但是這將是能夠找到每個城市的10對最活躍的用戶來說非常實用。甚至更有用,但我認爲在SQL中可能不可能,在活動方面排名前10%。

如果有人可以提出如何完成這兩項任務或兩項任務的想法,我將不勝感激。

我正在使用Navicat連接到這個任務的MySQL服務器。

+3

FWIW,**你當前的查詢可以返回壞的結果**。既然你也不會在'user_id'上進行分組,你得到的'user_id'可能與'max(login_count')有關,除了MySQL之外的其他RDBMS迫使你將所有非聚合分組。 – JNK 2011-04-14 19:11:20

+1

你應該在這裏找到你的答案http://stackoverflow.com/questions/tagged/greatest-n-per-group+mysql – 2011-04-14 19:21:26

+0

嗨JNK,非常感謝你的迴應 - 我完全不知道的東西。快速解釋你將如何改變查詢來避免這個問題?我也嘗試了通過user_id進行分組,但是結果很奇怪... – user708580 2011-04-22 09:06:11

回答

0

可以做到前10名:

select user_id 
    , city 
    , login_count 
    from user 
group by user_id 
    , city 
order by city 
    , login_count desc 
limit 10 

我不想經常運行的查詢,因爲這將是相當緩慢,因爲需要在一個臨時表中的文件排序,如果你看在解釋計劃。

+0

查詢沒有意義。任何可以添加解釋的機會 – 2011-04-14 19:27:23

+0

@ Imre是否意味着在@Joe提供的答案上發佈此評論,因爲該查詢沒有任何意義:) – Wes 2011-04-14 19:32:07

+2

這將只返回前10位,而不是前10位*每個城市* – 2011-04-14 19:48:22

1

如果您使用的是MySql,則可以使用SELECT TOP 10 PERCENT語句。

select top 10 percent * from (
    select user_id, city, max(login_count) 
    from user 
    group by user_id,city 
    order by max(login_count)) 
+0

http://www.w3schools .COM/SQL/sql_top.asp – 2015-04-17 10:32:09

相關問題