2015-10-03 39 views
1

以下查詢根據用戶投了多少次來計票...我想知道特定用戶隊列中的#號。反轉分組查詢的序列號

SELECT @s:[email protected]+1 serial_number, user_id, COUNT(slug_owner) as cnt 
FROM `votes_queue`,(SELECT @s:= 0) AS s 
GROUP BY slug_owner 
ORDER BY cnt DESC 

serial_number | user_id | cnt  
3 | 19 | 8 
2 | 14 | 4 
1 | 13 | 2 

從本質上講,我需要的數字在SERIAL_NUMBER列被扭轉,所以我可以告訴大家,用戶13是一個基於投票#3 ..

回答

0

產生有序計數後分配序列號:

SELECT @s:[email protected]+1 serial_number, temp.* 
FROM (
    SELECT user_id, COUNT(slug_owner) as cnt 
    FROM `votes_queue`, 
    GROUP BY slug_owner 
    ORDER BY cnt DESC 
) temp, (SELECT @s:= 0) AS s 
+0

謝謝。這真的很有幫助! – Ando

0

由於GROUP BY和變量不混合,序列號不會被反轉。 ORDER BY很好。您可以使用@ hjpotter92的解決方案,但下面也解決了這個問題:

SELECT (@rn := @rn + 1) as serial_number, t.* 
FROM (SELECT serial_number, user_id, COUNT(slug_owner) as cnt 
     FROM `votes_queue` 
     GROUP BY slug_owner 
    ) t CROSS JOIN 
    (SELECT @rn := 0) params 
ORDER BY cnt DESC; 

我認爲性能是一樣的。我提供這個答案只是爲了澄清實際問題。

+0

我用@ hjpotter92的答案去了。感謝您分享第二個解決方案。希望這會使其他人受益。 – Ando