【发布时间】:2010-11-10 13:10:45
【问题描述】:
我想找到第 N 个percentile。
例如:table:htwt;列:姓名、性别、身高、体重
结果:
| gender | 90% height | 90% weight |
| male | 190 | 90 |
| female | 180 | 80 |
【问题讨论】:
标签: sqlite percentile
我想找到第 N 个percentile。
例如:table:htwt;列:姓名、性别、身高、体重
结果:
| gender | 90% height | 90% weight |
| male | 190 | 90 |
| female | 180 | 80 |
【问题讨论】:
标签: sqlite percentile
sqlite 的分析处理能力不强,但如果你的数据不是很大,你可以尝试用ORDER BY、LIMIT 1 和计算得到的OFFSET 模拟百分位数。请注意,OFFSET 是从零开始的,因此您需要将其调整为 1。
SELECT
height AS 'male 90% height'
FROM table
WHERE gender='male'
ORDER BY height ASC
LIMIT 1
OFFSET (SELECT
COUNT(*)
FROM table
WHERE gender='male') * 9 / 10 - 1;
【讨论】:
male_count 的查询。
我需要多个百分比(10、20 ... 100%)并通过以下方式解决:
WITH p AS (SELECT height, NTILE(10) OVER (ORDER BY height) AS percentile
FROM table
WHERE gender = 'male')
SELECT percentile, MAX(height) as height
FROM p
GROUP BY percentile;
此解决方案需要 SQLite 3.28.0 或更高版本才能使用 NTILE 窗口函数。
【讨论】:
ntile(100) 将我的表分成 100 个 bin,最终在 bin 1-55 中有 7 个样本,在 bin 56-100 中有 6 个样本。所以我所有的顶部垃圾箱只有底部垃圾箱的 6/7 (86%) 大小,这是一个很大的差异。