SQL中的HAVING和WHERE之间的区别

ash章鱼

其他 问题中我看到SQLHAVINGWHERESQL之间的区别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中编写/测试/执行的。

马修·帕西诺斯(Mathew Paxinos)

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

步骤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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章