这是一个有效的 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 查询吗?的主要内容,如果未能解决你的问题,请参考以下文章

Percentile_Cont 函数抛出错误

BigQuery:标准 SQL 和 PERCENTILE_CONT() 函数

在 Vertica 中创建 percentile_cont 作为聚合函数

sql server 2008 中 percentile_cont 的替代方案

如何克服 `PERCENTILE_CONT` 的参数应该是常量的限制?

apache spark sql中的等效percentile_cont函数