SQL学习笔记——表分组(group by)

1、group by子句:

使用group by 子句时,会将表中的数据分为多个组进行处理,在group by 子句中指定的列称为聚合键或者分组列,当聚合键出现null时,也会将null作为一组特定的数据。

select type,count(*)
from product
group by type;
--解释:如果没有“group by type”这一句,那么统计的是表的所有记录。现在添加“group by type”这一句,会将整个表,按照type进行分组,相同type 的为一组,然后每个组进行统计,统计本组的记录数。

2、where子句和group by子句结合使用:

使用where子句进行汇总处理时,会先根据where子句指定的条件进行过滤,然后再进行汇总处理。

group by 和where 并用时select语句的执行顺序from → where → group by→ select

select <列名1>, <列名2>, <列名3>, ……
from <表名>
where
group by <列名1>, <列名2>, <列名3>, ……;

--例子1:
select purchase_price, COUNT(*)
from product
where product_type = '衣服'
group by purchase_price;
--解释:先将字段product_type值为衣服的记录筛选出来,然后再按照purchase_price进行分组,最后统计每组的记录总数。

3、注意:

  1. 最好不要把聚合键之外的列名书写在select子句之中,这种语法,mysql是认同的,但是其他DBMS都不支持这种语法。

  2. group by子句的查询结果的顺序排列时随机的。

  3. where子句中不能使用聚合函数。只有select子句、having子句、order by子句中能够使用聚合函数。


版权声明:本文为liu_feng_zi_原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。