Mysql 检索SQL列中特定值的百分比

Mysql 检索SQL列中特定值的百分比,mysql,sql,Mysql,Sql,假设我知道在SQL列中有一个特定的值,我想确定它的百分位数。基于另一个SO post(),我尝试修改它,它可以工作,但返回列中每个值的排名: mysql> SELECT FIND_IN_SET( sum_squares, (SELECT GROUP_CONCAT(sum_squares ORDER BY sum_squares DESC) | -> FROM entries)

假设我知道在SQL列中有一个特定的值,我想确定它的百分位数。基于另一个SO post(),我尝试修改它,它可以工作,但返回列中每个值的排名:

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
有人能给我解释一下为什么我的查询似乎被拒绝了,还有没有其他方法可以做到这一点?我宁愿不返回整个专栏

下面是一个示例
条目
表:

+----+-------------+
| id | sum_squares |
+----+-------------+
|  1 |           5 |
|  2 |           5 |
|  3 |          55 |
|  4 |          33 |
|  5 |         111 |
+----+-------------+
下面是@GordonLinoff评论之后几乎做了什么:

mysql> SELECT FIND_IN_SET( sum_squares, (SELECT GROUP_CONCAT( sum_squares ORDER BY sum_squares DESC)
    -> FROM entries HAVING sum_squares = 5)
    -> )  AS rank
    -> FROM entries
但是,这将在匹配行中返回答案,在其他行中返回NULL,因此我欢迎对此进行改进。谢谢

+------+
| rank |
+------+
|    4 |
|    4 |
| NULL |
| NULL |
| NULL |
+------+

如果您想要单个条目的排名,请尝试以下查询:

SELECT COUNT(DISTINCT sum_squares) + 1
FROM entries
WHERE sum_squares > 5 ;

使用
having
子句,而不是
where
子句。这是一个MySQL扩展,可以满足您的需要。另外,您需要将它放在select语句中的正确位置。@GordonLinoff就是这样做的。如果你不想的话,我可以发布答案(把have放在条目的第一个后面)。让我知道。