SQL - Oracle 19c 的问题:
我使用分析函数运行数据集(使用分区依据,不排序)。对于每一行,我想将当前行与组内的其余行进行比较,如果我有匹配项,我会计算我有多少个匹配项。
我希望得到这样的结果(组中相同数据的可用频率):
sum(case when current_row.dt = row.dt then 1 else 0 end) over (partition by x)
所以我的问题是:
我可以通过将当前行值与组中的其他行进行比较来比较数据集中的当前行和组中的每一行吗?
我可以将数据连接到每一行,然后运行比较。但由于我需要很多这样的比较,这最终会导致很多连接。所以我期望该功能应该是开箱即用的。是的,我可以编写自己的聚合函数,它也能达到这个目的,但正如前面所说,这应该是 SQL 标准的一部分?
我希望得到这样的结果(组中相同数据的可用频率):
sum(case when current_row.dt = row.dt then 1 else 0 end) over (partition by x)
不要使用
CASE
表达式,只需在 dt
子句中包含 PARTITION BY
即可:
SUM(1) OVER (PARTITION BY x, dt)