sql grop by having order by 的用法

GROUP BY 语句

group by 一般和聚合函数一起使用,根据一个或者多字段对结果集进行分组统计。


使用示例:orders表为例

O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter

现在,我们希望查找每个客户的总金额(总订单)。

我们想要使用 GROUP BY 语句对客户进行组合,就是把同一个客户放在一组。

 SQL 语句如下:

SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer

结果集类似这样:

Customer SUM(OrderPrice)
Bush 2000
Carter 1700
Adams 2000

让我们看一下如果省略 GROUP BY 会出现什么情况:

SELECT Customer,SUM(OrderPrice) FROM Orders

结果集类似这样:

Customer SUM(OrderPrice)
Bush 5700
Carter 5700
Bush 5700
Bush 5700
Adams 5700
Carter 5700

上面的结果集不是我们需要的。

那么为什么不能使用上面这条 SELECT 语句呢?解释如下:上面的 SELECT 语句指定了两列(Customer 和 SUM(OrderPrice))。"SUM(OrderPrice)" 返回一个单独的值("OrderPrice" 列的总计),而 "Customer" 返回 6 个值(每个值对应 "Orders" 表中的每一行)。因此,我们得不到正确的结果。不过,您已经看到了,GROUP BY 语句解决了这个问题。

having 用法

having  的使用是由于where不能与聚合函数进行一起使用 ,having在使用的过程中只能用在group by 后面,针对分组的结果进行筛选。

示例:表示按照name进行分组后取出name字段重复的元素

1
SELECT  "count" (name)  ,name    from  an_name  GROUP  BY  name  HAVING  "count" (*)>1


order by

order by 表示排序 asc 升序 ,desc 降序


当一个查询语句同时出现了where,group by,having,order by (这个顺序也是sql在编写时候的顺序)的时候,执行顺序和编写顺序是:
1.执行where xx对全表数据做筛选,返回第1个结果集。
2.针对第1个结果集使用group by分组,返回第2个结果集。
3.针对第2个结果集中的每1组数据执行select xx,有几组就执行几次,返回第3个结果集。
4.针对第3个结集执行having xx进行筛选,返回第4个结果集。

5.针对第4个结果集排序。

6.分组字段必须包含在查询字段里。





你可能感兴趣的:(sql,group,by,having,where,Mysql必备知识点)