SQL Where 和 Group By 的区别
Where
和 Group By
子句用于根据条件过滤查询返回的行。 区别如下:
WHERE
子句指定查询返回的行的搜索条件,并将行限制为特定的行集。 如果一个表有大量记录,并且如果有人想要获取特定记录,那么使用where
子句很有用。GROUP BY
子句将相同的行汇总到一个/不同的组中,并通过在SELECT
列表中使用适当的聚合函数,如:COUNT()
、SUM()
、MIN()
、MAX()
,返回单个行以及每个组的摘要 , AVG() 等。
用例:
假设某个销售公司想要获得一份去年购买了一些商品的客户的列表,以便他们今年可以向他们销售更多的东西。
有一个名为 SalesOrder
的表,其中包含 CustomerId
、 SalesOrderId
、 Order_Date
、 OrderNumber
、 OrderItem
、 UnitPrice
、 OrderQty
这些字段。
现在需要获取去年即 2022
年下订单的客户
使用 Where 子句 –
这将返回包含 2022
年所有客户和相应订单的行集。
使用 Group By 子句 –
这将返回在 2022
年下订单的客户 ( CustomerId
) 的行集以及每个客户下的订单总数。
使用从句
Having 子句用于过滤 Group By
子句中的值。 下面的查询过滤掉一些行:
由于 WHERE
子句的可见性是一次一行,因此无法评估所有 SalesOrderID
的 SUM
。 在创建分组后评估 HAVING
子句。
也可以将 Where
子句与 Having
子句一起使用。 WHERE
子句首先应用于表中的各个行。 只有满足 WHERE
子句中条件的行才会被分组。 然后将 HAVING
子句应用于结果集中的行。
例子:
所以在这里, having
子句将应用于由 where
子句过滤的行。 having
子句只能比较聚合函数的结果或分组依据的列部分。
结论
WHERE
用于在对单行进行任何分组之前过滤记录。GROUP BY
聚合/分组行并返回每个组的摘要。HAVING
用于在分组后过滤值。