假設我知道在SQL列中具有特定值,並且我想確定其百分位數。根據另一SO發佈(https://dba.stackexchange.com/questions/13703/get-the-rank-of-a-user-in-a-score-table)我試圖修改此,這工作,但返回列中的每個值的排名:在SQL列中檢索特定值的百分位數
mysql> SELECT FIND_IN_SET(sum_squares, (SELECT GROUP_CONCAT(sum_squares ORDER BY sum_squares DESC) |
-> FROM entries) |
->) AS rank |
-> FROM entries;
如下:
+------+ |
| rank | |
+------+ |
| 4 | |
| 4 | |
| 2 | |
| 3 | |
| 1 | |
+------+
我試圖修改它在FROM entries
如下之前追加WHERE
聲明:
mysql> SELECT FIND_IN_SET(sum_squares, (SELECT GROUP_CONCAT(sum_squares ORDER BY sum_squares DESC) |
-> FROM entries) |
->) AS rank
->) WHERE sum_squares = 5 |
-> FROM entries;
這將導致以下錯誤:
ERROR 1064 (42000): 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 'WHERE sum_squares = 5
FROM entries' at line 4
有人可以向我解釋爲什麼我的查詢似乎被禁止,如果有另一種方式來做到這一點?我寧願不返回整個專欄!
下面是一個示例entries
表:
+----+-------------+
| id | sum_squares |
+----+-------------+
| 1 | 5 |
| 2 | 5 |
| 3 | 55 |
| 4 | 33 |
| 5 | 111 |
+----+-------------+
使用'having'條款,而不是一個'where'條款。這是一個MySQL擴展,可以做你想做的事情。另外,你需要把它放在select語句的正確位置。 –
@GordonLinoff做到了。如果您不想要,我可以發佈答案(在第一個FROM條目之後放置HAVING)。讓我知道。 – sunny