我有一個MySQL表,它包含有關程序功能使用情況的統計信息。我從中檢索基本上就像這樣(前15名總點擊這裏):使用行排序的SQL子查詢的顛倒順序
SELECT function_id, data_timer, SUM(data_counter) total
FROM data
GROUP BY function_id
ORDER BY total DESC
+-------------+------------+-------+
| function_id | data_timer | total |
+-------------+------------+-------+
| 56 | 567 | 4389 |
| 23 | 7880 | 1267 |
| 7 | 145 | 812 |
| ... | ... | ... |
+-------------+------------+-------+
由於這些結果網站模塊中,用戶可以選擇哪些列將用於ORDER BY以及ASC之間和DESC,我需要檢索排名的每行結果。
有了這個question的幫助下,我才得以將排序分配的結果的每一行:
SET @rank = 0;
SELECT @rank:[email protected]+1 AS rank, function_id, data_timer, SUM(data_counter) total
FROM data
WHERE client_id = 2
GROUP BY function_id
ORDER BY total DESC
+------+-------------+------------+-------+
| rank | function_id | data_timer | total |
+------+-------------+------------+-------+
| 1 | 56 | 567 | 4389 |
| 2 | 23 | 7880 | 1267 |
| 3 | 7 | 145 | 812 |
| ... | ... | ... | ... |
+------+-------------+------------+-------+
我現在有一些困難,試圖顛倒這個表,這意味着我想有結果首先用最少使用的函數排序。像這樣的東西(假設有76起):
+------+-------------+------------+-------+
| rank | function_id | data_timer | total |
+------+-------------+------------+-------+
| 76 | 44 | 346 | 1 |
| 75 | 2 | 3980 | 4 |
| 74 | 13 | 612 | 7 |
| ... | ... | ... | ... |
+------+-------------+------------+-------+
這裏是我的SQL查詢的嘗試:
SELECT rank, function_id, data_timer, total
FROM
(
SET @rank = 0;
SELECT @rank:[email protected]+1 AS rank, function_id, data_timer, SUM(data_counter) total
FROM data
WHERE client_id = 2
GROUP BY function_id
ORDER BY total DESC
)
ORDER BY rank DESC
它不斷出現我:
#1064 - You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near
'SET @rank = 0' at line 4
因爲我不是對SQL太熟練了,我猜我錯過了一些明顯的東西。
任何幫助將不勝感激,謝謝!
如果你按總遞減排序,將反轉由總ASC訂購,不是?爲什麼使用子查詢? –
「*我希望先用最少使用的函數對結果進行排序。」什麼表示這個值? 'SUM(data_counter)',別的? –