一、查询语句 group by 分组
- group by 关键字可以根据一个或多个字段对查询结果进行分组
- group by 一般都会结合Mysql聚合函数来使用
- 如果需要指定条件来过滤分组后的结果集,需要结合 having 关键字;原因:where不能与聚合函数联合使用 并且 where 是在 group by 之前执行的
group by 的语法格式:
GROUP BY <字段名>[,<字段名>,<字段名>]
二、group by 后面有多个字段
如果group by后面有多个字段,其实和 order by 后的多个字段是差不多的。例如:group by a , b ;将字段a,b共有的多条数据合并,不同的数据则不合并。具体例子如下:
三、group by 后面的having
group by 后面的having是对分组后的字段进行再次过滤筛查,一般是用聚合函数。如下例子:(对字段a 分组,并且在分组前的数量要大于1)
select a,
count(1),
max(b)
from f
where a like 'X%'
group by a
having count(a) > 1
或者也可以对非分组字段进行聚合函数的筛选
四、HAVING子句可包含一个或多个用AND和OR连接的谓词
五、用HAVING句后,在select后 用count(*)的不同
SELECT COUNT(*),Ssex FROM Student GROUP BY Ssex;
六、group by 后的关键字ALL
group by 后的关键字All,如果通过where 条件过滤后,才进行group by 。那么关键字All就是把不满足的条件的数据也全都展示出来。
七、group by 后的关键字CUBE和ROLLUP
首先需要说明的是Group By All 语句是不能和CUBE 和 ROLLUP 关键字一起使用的。
八、使用字段别名的注意事项
由于mysql的执行顺序如下:
from
on
join
where
group by
select
having
order by
limit
由上可知:select后的字段别名,只能在select执行之后的,才能使用。