是否可以仅在我的某些列上使用Vertica中的HAVING子句? 寻找最有效的方式,因为我正在处理数百万行。
以下是我要做的事情的一个例子: 鉴于表t:
A | B | number
--+---+-------
a | c | 1
a | c | 2
a | d | 1
b | e | 1
b | e | 1
c | c | 1
如果我跑:
SELECT A, B, sum(number) as total
FROM t
GROUP BY 1, 2
HAVING sum(number) >= 2
我会得到:
A | B | total
--+---+------
a | c | 3
b | e | 2
我想以某种方式能够将HAVING条件仅应用于A列,而不是(A,B)组合,以便我的结果真的如下:
A | B | total
--+---+------
a | c | 3
a | d | 1
b | e | 2
猜猜我可以这样做:
SELECT A, B, sum(number) as total
FROM t
WHERE A IN (
SELECT A
FROM t
GROUP BY 1
HAVING sum(number) >= 2
)
GROUP BY 1, 2
但是有更好的方法吗?
答案 0 :(得分:0)
您的查询看起来不错。
您可以使用分析函数,但不确定这是否会提高性能。您应该尝试向我们展示解释计划。
SELECT DISTINCT A, B, total_ab
FROM (
SELECT A,
B,
SUM(number) OVER (partition by A) total_a,
SUM(number) OVER (partition by A,B) total_ab
FROM t
) X
WHERE X.total_a >=2