gpt4 book ai didi

sql - SQL 窗口函数中的列表或连接

转载 作者:行者123 更新时间:2023-12-03 02:07:55 26 4
gpt4 key购买 nike

我团队的一位(对 SQL 比较陌生)成员正在编写一个碰巧使用窗口函数的 SQL 查询。经过审查,我注意到他们的窗口函数结构如下:

COUNT(*) OVER(PARTITION BY Part1+Part2) AS A

我立即做了一个反馈说明,说它应该是这样的:

COUNT(*) OVER(PARTITION BY Part1, Part2) AS A

Part1 和 Part2 都是 nvarchar。

然后我停下来反射(reflection),但我实际上无法弄清楚为什么这是错误的。据我所知,这实际上会产生相同的结果(确实如此)。除了第一个查询的初始表扫描之后的额外计算标量步骤(这是查询成本的 0%)之外,实际的执行计划几乎相同。 I/O 统计数据显示,第一个版本的逻辑读取次数减少了 5 次(12,665 到 12,670)。

那么,除了编码约定之外,使用这两种形式有什么好处/坏处吗?在这种情况下,这是否可以正常工作,但在某些情况下可能会产生不一致的结果?

最佳答案

这两个表达式都是有效的,但它们做的事情不同。

考虑以下数据:

Part1    Part2
AB C
A BC

当使用 PARTITION BY Part1+Part2 连接字符串时,两条记录都属于同一分区,而当使用 PARTITION BY Part1, Part2 时,它们将属于不同的分区。

所以问题实际上归结为:您的用例的正确分区标准是什么?通常,除非您正在做一些奇特的事情,否则您需要PARTITION BY Part1, Part2。但这实际上必须根据您的实际用例从功能角度来回答。

关于sql - SQL 窗口函数中的列表或连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58169207/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com