为什么FIRST_VALUE和LAST_VALUE不是SQL中的聚合函数?

问题描述 投票:0回答:1

SQL是否有特殊原因仅将FIRST_VALUE和LAST_VALUE实现为窗口函数而不是聚合函数?我发现遇到诸如“在每个类别中找到价格最高的商品”之类的问题非常普遍。而其他语言(例如python)通过关键字提供MIN / MAX函数,例如

MAX(item_name, key=lambda x: revenue[x])

可能,在SQL中解决此问题的唯一方法似乎是:

WITH temp as(
SELECT *, FIRST_VALUE(item_name) OVER(PARTITION BY category ORDER BY revenue) as fv
FROM catalog)
SELECT category, MAX(fv) -- MIN(fv) also OK
FROM temp
GROUP BY category;

是否有特殊原因导致没有FIRST_VALUE的“聚合版本”,例如

SELECT category, FIRST_VALUE(item_name, revenue)
FROM catalog
GROUP BY
category

或者仅仅是它的样子吗?

sql hiveql
1个回答
0
投票

就我而言,就是这样。我怀疑唯一真正的答案是“因为它不在SQL规范中”,唯一能真正回答的人就是编写它的人。

聚合函数可处理数据集,尽管其中一些可能需要某些隐式排序操作(例如中位数),但这些函数始终围绕它们正在操作的列,而不是“基于该列的排序”

[许多窗口/分析功能没有推论汇总版本,并且它们的最终使用意图与汇总不同。您可以设想它们中的一些会执行聚合,然后将agggregstion结果重新添加到主数据中,以便将agg结果与特定行相关联,但是我不会假设这两个功能(agg vs window)完全相关

© www.soinside.com 2019 - 2024. All rights reserved.