使用Group By / Having子句的查询是否可以修改为仅使用Select / From / Where子句的另一个查询?
TABLE T(a, b, c)
SELECT a, sum(c)
FROM T
WHERE b>10
GROUP BY a
HAVING sum(c)>5
如果您能详细解释为什么可以(不)这样做,我将不胜感激。
答案 0 :(得分:3)
当然,如果您的特定数据库支持这些功能,您可以使用窗口函数:
SELECT a, s
FROM (
SELECT DISTINCT a, sum(c) OVER (PARTITION BY a) s
FROM t1
WHERE b > 10
) t2
WHERE s > 5
另一种选择是使用相关子查询,它适用于所有数据库:
SELECT a, s
FROM (
SELECT DISTINCT a, (SELECT sum(c) FROM t t3 WHERE t1.a = t3.a AND b > 10) s
FROM t t1
WHERE b > 10
) t2
WHERE s > 5
如果不使用GROUP BY
或HAVING
,这些替代方案会产生相同的结果。但是其中任何一个都会慢得多,而且我真的没有看到这一点......