Edu*_*uca 13 postgresql postgresql-9.4
我有一个包含客户和分数的表(基于不同的因素,在这种情况下无关紧要;一个客户可以有多个分数),如下所示:
customer_id | score | score_giver_id
====================================
1 | 100 | 1
1 | 102 | 1
1 | 101 | 1
1 | 140 | 1
2 | 131 | 3
1 | 44 | 1
3 | 223 | 1
3 | 1 | 2
3 | 201 | 1
3 | 211 | 1
3 | 231 | 1
3 | 243 | 1
Run Code Online (Sandbox Code Playgroud)
本score_giver_id是无关紧要的,但我还是想拿来。
在上面的示例中,当获取按 customer_id 分组的第 50 个百分位数时,结果应该是(我在本示例中选择了第 50 个百分位数,因为它说明了我想要做得更好的内容):
customer_id | score | score_giver_id
====================================
1 | 101 | 1
2 | 131 | 3
3 | 223 | 1
Run Code Online (Sandbox Code Playgroud)
我使用了这里描述的方法。
我需要分别在 PostgreSQL 中的第 10 个百分点和第 90 个百分点处获得值。我已经看到从 9.4 开始就有一个ntile函数,但我真的不明白它是如何工作的,它的作用是什么,以及它是否对我有帮助。
我找到了一个很好的 MySQL 片段,它可以工作(即使有一些警告),但我想使用内置函数(如果可用)(对于 MySQL 没有,因此是片段)。
dez*_*zso 22
您似乎在使用percentile_disc()有序集聚合函数。
该文件说,有关它的情况如下:
percentile_disc(fraction) WITHIN GROUP (ORDER BY sort_expression)离散百分位数:返回在排序中的位置等于或超过指定分数的第一个输入值
聚合的语法有点奇怪,但使用它很容易:
SELECT percentile_disc(0.9) WITHIN GROUP (ORDER BY score)
FROM customer_score
GROUP BY customer_id;
Run Code Online (Sandbox Code Playgroud)
您定义从ORDER BY子句中获取百分位数的列。
| 归档时间: |
|
| 查看次数: |
14417 次 |
| 最近记录: |