gpt4 book ai didi

sql - SQL中的HAVING和WHERE之间的区别

转载 作者:行者123 更新时间:2023-12-03 18:42:48 25 4
gpt4 key购买 nike

我已经看到in other questions在SQL中HAVINGWHERE之间的区别是HAVING用于聚合后,而WHERE用于聚合前。但是,我仍然不确定何时使用聚合前过滤或聚合后过滤。

举一个具体的例子,为什么这两个查询没有产生相同的结果(第二个和quantity过早地压缩了GROUP BY调用)?

使用WHERE获得每个房地产经纪人的公寓销售数量。

SELECT agentId, SUM(quantity) total_sales 
FROM sales s, houses h
WHERE s.houseId = h.houseId AND h.type = "condo"
GROUP BY agentId
ORDER BY total_sales;


尝试使用 HAVING获得与上述相同的数量。

SELECT agentId, SUM(quantity) total_sales 
FROM sales s, houses h
GROUP BY agentId
HAVING s.houseId = h.houseId AND h.type = "condo"
ORDER BY total_sales;


注意:这些是在sqlite3中编写/测试/执行的。

最佳答案

考虑它的简单方法是考虑步骤的应用顺序。

步骤1:Where子句过滤数据

步骤2:实施分组依据(SUM / MAX / MIN / ETC)

步骤3:让子句过滤结果

因此,在您的2个示例中:

SELECT agentId, SUM(quantity) total_sales 
FROM sales s, houses h
WHERE s.houseId = h.houseId AND h.type = "condo"
GROUP BY agentId
ORDER BY total_sales;


步骤1:按HouseId和Condo筛选

步骤2:将结果相加
(与房屋和公寓相匹配的房屋数量)

SELECT agentId, SUM(quantity) total_sales 
FROM sales s, houses h
GROUP BY agentId
HAVING s.houseId = h.houseId AND h.type = "condo"
ORDER BY total_sales;


步骤1:没有筛选器

步骤2:加总所有房屋的数量

第3步:按房屋和公寓筛选结果。

希望这可以清除正在发生的事情。

决定应该使用哪个的最简单方法是:
-使用WHERE过滤数据
-使用HAVING过滤汇总结果(SUM / MAX / MIN / ETC)

关于sql - SQL中的HAVING和WHERE之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53509276/

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