![]() |
1
2
这是一个相对丑陋的答案,我说出来感到内疚。也就是说,它可能会帮助你解决你的问题。 确定百分比的一种方法是对所有行进行计数,并对大于您提供的行数的行数进行计数。您可以计算大于或小于,并根据需要取反数。 在您的号码上创建一个索引。 总计=选择计数( ; less_equal=选择计数( )其中,value>indexed_number; 百分比应该是:小于等于/总计或(总计-小于等于)/总计 确保它们都使用您创建的索引。如果不是,调整它们直到它们是。解释查询的右边列应该有“使用索引”。在select count(*)的情况下,应该使用innodb的index和myisam的const。Myisam将随时知道这个值,而不必计算它。 如果需要将百分比存储在数据库中,可以使用上面的设置来提高性能,然后使用第二个查询作为内部选择来计算每行的值。第一个查询的值可以设置为常量。 这有帮助吗? 雅各伯 |
![]() |
2
19
这里有一个不需要加入的不同方法。在我的例子中(一个有15000+行的表),它在3秒钟内运行。(连接方法需要更长的数量级)。 在样本中,假设 测量 是计算百分比排名的列,并且 身份证件 只是行标识符(不需要):
这种方法归功于Shlomi Noach。他在这里详细地写到: http://code.openark.org/blog/mysql/sql-ranking-without-self-join 我在MySQL中测试过这个,它工作得很好;不知道Oracle、SQLServer等。 |
![]() |
3
4
|
![]() |
4
2
如果要将SQL与一种过程语言(如PHP)组合,可以执行以下操作。这个例子将过多的航班阻塞时间分解成机场的百分比。结合使用mysql中的limit x,y子句
|
![]() |
5
2
|
![]() |
6
1
MySQL8最终引入了窗口函数,其中
你的问题提到“百分位数”,这是一个稍微不同的事情。为了完整,有
|
![]() |
7
0
为了获得排名,我想说你需要(左)外部加入表格本身,比如:
对于每一行,您将计算同一表中有多少(如果有的话)行的值较低。
注意,我更熟悉sqlserver,所以语法可能不正确。另外,对于你想要达到的目标,不同的人可能没有正确的行为。但这是一般的想法。
|
![]() |
8
0
假设我们有一个销售表,比如: 用户标识 然后,下面的查询将给出每个用户的百分比:
请注意,这将用于交叉联接,因此会导致O(n2)复杂性,因此可以将其视为未优化的解决方案,但由于MySQL版本中没有任何函数,因此看起来很简单。 |
![]() |
9
-1
不确定op的“百分位排名”是什么意思,但要获得一组值的给定百分位,请参见 http://rpbouman.blogspot.com/2008/07/calculating-nth-percentile-in-mysql.html SQL计算可以很容易地更改以生成另一个或多个百分点。 一个注意事项:我必须稍微改变计算方法,例如90%的数值——“90/100*计数(*)+0.5”,而不是“90/100*计数(*)+1”。有时它跳过了排序列表中超过百分位点的两个值,而不是为百分位选择下一个更高的值。也许整数舍入在MySQL中的工作方式。 IE: …substring_index(substring_index(group_concat(fieldvalue order by fieldvalue separator),'),',',90/100*count(*)+ 零点五 ),',',-1)作为第90个百分点… |
![]() |
greycat · vba排序循环需要秩 7 年前 |
![]() |
jasonxia · C++类型秩(有符号/无符号int的类型转换) 7 年前 |
![]() |
stklik · 带子图的graphviz三秩布局 7 年前 |
![]() |
Johnny Banana · 对不同列使用秩 7 年前 |
![]() |
Brent · 对齐Graphviz中的列 7 年前 |
![]() |
RudziankoÅ · SQL:从两个相关表中选择最大值 7 年前 |
![]() |
Wilhelm Fantastisch · R中for循环的组内秩 7 年前 |
![]() |
Question · 如何在sqlite中对表中的行进行排序? 8 年前 |