在 其他 问题中,我看到了SQLHAVING
和WHERE
SQL之间的区别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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句