Mysql SQL秩百分位数

Mysql SQL秩百分位数,mysql,sql,rank,percentile,Mysql,Sql,Rank,Percentile,我做了一个SQL查询,它根据页面的浏览次数对页面进行排序。比如说, ╔══════╦═══════╗ ║ PAGE ║ VIEWS ║ ╠══════╬═══════╣ ║ J ║ 100 ║ ║ Q ║ 77 ║ ║ 3 ║ 55 ║ ║ A ║ 23 ║ ║ 2 ║ 6 ║ ╚══════╩═══════╝ 现在我想做的是使用SQL查询查找每个页面的百分位排名。我想用的数学很简单,我只想用已经生成的表的行数除以总行数。或者1减去这

我做了一个SQL查询,它根据页面的浏览次数对页面进行排序。比如说,

╔══════╦═══════╗
║ PAGE ║ VIEWS ║
╠══════╬═══════╣
║ J    ║   100 ║
║ Q    ║    77 ║
║ 3    ║    55 ║
║ A    ║    23 ║
║ 2    ║     6 ║
╚══════╩═══════╝
现在我想做的是使用SQL查询查找每个页面的百分位排名。我想用的数学很简单,我只想用已经生成的表的行数除以总行数。或者1减去这个值,取决于我的兴趣

我可以像这样对已经生成的表进行计数(页数)吗?我意识到这就是我获得总行数的方法。但是有没有返回行号的命令

为了进一步澄清我的问题,我需要以下结果

╔══════╦════════════════╗
║ PAGE ║ Percentile     ║
╠══════╬════════════════╣
║ J    ║   (1-1/5)*100  ║
║ Q    ║   (1-2/5)*100  ║
║ 3    ║   (1-3/5)*100  ║
║ A    ║   (1-4/5)*100  ║
║ 2    ║   (1-5/5)*100  ║
╚══════╩════════════════╝
或一般(1-(行号)/(计数(页数))*100


您不能在一条SQL语句中计算一个表中的百分位等级。John Woo在这里建议的方法在计算排名靠前的等级后会崩溃,即使对于正在处理的表的第一个(不可预测的)百分比,即前几个百分位,结果看起来确实不错

Oracle Ace罗兰·鲍曼(Roland Bouman)在本文中解释了原因:

简而言之:用户定义的变量在单个SQL语句中不是可靠的,只能跨多个SQL语句

阅读MySQL手册中关于用户定义变量的第一句话: “您可以将值存储在一条语句中的用户定义变量中,然后在另一条语句中引用。”


然后在第10段中,我们可以看到这样一条清晰的语句:“作为一般规则,除了SET语句之外,您永远不应该给用户变量赋值并读取同一语句中的值。[…]涉及用户变量的表达式的求值顺序是未定义的。”

您使用的是什么?
RDBMS
代表关系数据库管理系统。
RDBMS是SQL
以及所有现代数据库系统(如MS SQL Server、IBM DB2、Oracle、MySQL等)的基础。您还可以说明您想要的结果是什么吗?MySQL。我将添加一个额外的表,其中包含我正在寻找的示例。请执行以下操作:ks
:D
说明DBMS的另一个原因是大多数DBMS已经内置了这样一个函数(而不是MySQL)。
SELECT  page, 
        views,
        (1-ranks/totals)*100 Percentile
FROM
(
    SELECT  page,
            views,
            @rank:=@rank + 1 ranks,
            (SELECT COUNT(*) FROM tableName) totals
    FROM    tableName a,
            (SELECT @rank:=0) s
    ORDER   BY views DESC
) s