Php 使用百分比选择(限制X,1)获取行数的最快方法?
在我的MySQL数据库中,我有一个超过1000万行的表(PERSONS),其中两个重要的列是:Php 使用百分比选择(限制X,1)获取行数的最快方法?,php,mysql,sql,rowcount,Php,Mysql,Sql,Rowcount,在我的MySQL数据库中,我有一个超过1000万行的表(PERSONS),其中两个重要的列是: 身份证 要点 我想知道ID=randomid的人的排名 我想回到这个人的“等级”,这取决于他的分数但是他的排名不是确切的行数,而是更像一个百分比层。比如:“你在前5%,”或者“你在第10%-15%的层次” 当然,我可以查询表并将行数除以总行数,将其转换为层%。但我的问题是,如果只抓取限制为X,1的几行,其中X将是百分比为100,95,90,85的一行,速度会更快吗(10米以上的行)。。桌子的另一边
- 身份证
- 要点
谢谢你的帮助。你可以试试这个。我首先计算多个点的行数,然后再加上一行,以防多个行的点数相同。因此,如果有10行具有相同的点数,那么它们都与该组中的第一行具有相同的排名
SELECT SUM(CASE WHEN points > (SELECT POINTS FROM YOUR_TABLE WHERE ID = randomid) THEN 1 ELSE 0 END) + 1 as Rank,
(SUM(CASE WHEN points > (SELECT POINTS FROM YOUR_TABLE WHERE ID = randomid) THEN 1 ELSE 0 END) + 1) / COUNT(*) as Pct
FROM YOUR_TABLE
如果这很慢,我将运行两个查询。首先获取该ID的点,然后将其插入到第二个查询中以确定秩/pct
SELECT POINTS
FROM YOUR_TABLE
WHERE ID = randomid
然后计算秩和pct,从上面插入点
SELECT SUM(CASE WHEN points > POINTS THEN 1 ELSE 0 END) + 1 as Rank,
(SUM(CASE WHEN points > POINTS THEN 1 ELSE 0 END) + 1) / COUNT(*) as Pct
FROM YOUR_TABLE
这似乎是一个关于mysql和百分位数的问题。我说的对吗?是的,我指的是百分位数Pct就是我所说的百分比计算。你可以称它为任何东西。在一个有600k行的测试表上,它非常快,0,3秒。这真是太好了。此解决方案是否比具有行数的选择更快?我对SQL很陌生,所以我不完全理解您的查询:)我对stackoverflow也很陌生,正如您所知。有很多不同的方法可以做到这一点。这可能不是最快的,但它相对整洁。最快的方法可能是进行3次调用并将结果存储在PHP变量中,然后进行计算。首先,您将获得相关ID的点数
从您的\u表中选择点数,其中ID=randomid
,然后从您的\u表中获取排名选择计数(*)+1,其中POINTS>
,然后从\u表中获取总记录选择计数(*)。