这是一个有效的 PERCENTILE_CONT SQL 查询吗?
Posted
技术标签:
【中文标题】这是一个有效的 PERCENTILE_CONT SQL 查询吗?【英文标题】:Is this a valid PERCENTILE_CONT SQL query? 【发布时间】:2021-08-20 01:11:42 【问题描述】:我正在尝试运行 SQL 查询以在某个组内的表中查找第 50 个百分位,但随后我还将结果分组到同一字段中。这是我的查询,例如在 tpch 的国家表上:
SELECT
regionkey,
PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY regionkey)
FROM "tpch/nation"
GROUP BY regionkey
ORDER BY regionkey
这是一个有效的查询吗?我正在尝试通过运行各种不同的百分位查询来 QA 我的代码。 Postgres 为上述查询返回此结果:
regionkey | percentile_cont
-------------+-----------------
0 | 0
1 | 1
2 | 2
3 | 3
4 | 4
(5 rows)
但我的问题是在现实世界中,有人会尝试运行此类查询吗?我是聚合函数的新手,尤其是百分位数函数。
【问题讨论】:
这是一个有效的查询,因为它运行。这不是一个有效的查询,因为结果不稳定并且没有任何实际意义。样本数据和期望的结果会有所帮助。目前尚不清楚您真正想要做什么。 【参考方案1】:您可以使用percentile_cont()
来获取某个有序值的百分比。例如,如果您有该地区的 population
列,那么您将计算人口中位数:
SELECT regionkey,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY population)
FROM "tpch/nation"
GROUP BY regionkey
ORDER BY regionkey;
在ORDER BY
中使用regionkey
是没有意义的。在每个组中,regionkey
只有一个值。因此,PERCENTILE_CONT()
只能返回该值。
但是,它对于几乎任何其他列都非常有用。
【讨论】:
感谢您的解释。这正是我想要仔细检查和验证的答案。即使查询是无意义的,它在语法上仍然是有效的 SQL,并且应该按预期返回正确的结果。我只是想测试我的系统是否支持所有有效的 SQL,无论是否支持。以上是关于这是一个有效的 PERCENTILE_CONT SQL 查询吗?的主要内容,如果未能解决你的问题,请参考以下文章
BigQuery:标准 SQL 和 PERCENTILE_CONT() 函数
在 Vertica 中创建 percentile_cont 作为聚合函数
sql server 2008 中 percentile_cont 的替代方案