数据库中分组(group by ,having)和select语句中的执行顺序

1.group by

在使用select查询的时候,有时需要对数据进行分组汇总(即:将现有的数据按照某列来汇总统计),这时就需要用到group by语句。select 语句中可以使用group by 子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息。//分组一般都和聚合函数连用。

GROUP BY子句必须放到WHERE语句的之后 ,Group By与Order By都是对筛选后的数据进行处理,而Where是用来筛选数据的。

当使用了分组语句(group by)或者是聚合函数的时候,在select查询列表中不能包含其它列名,除非该列同时也出现在了group子句中,或者该列出现在某个聚合函数中。

--将表中数据按照性别来分组,并统计每种性别的人数
select 
       sum(tsage)            -tsage列包含在聚合函数sum中,如果不是聚合函数不能添加该列 
       性别 = tsgender,       -tsgender出现在group by 子句中
       人数 = count(*)        -人数列包含在聚合函数中
from  Tblstudent
group by tsgender
--执行顺序:1.from......2.group by.......3.select......       

2.having

    having是对分组之后的组数据进行筛选,where是对分组之前的每一行数据进行筛选

select 
      tsclassid as 班级ID,
      班级人数 = count(*)
from TblStudent
group by tsClassId
having count(*)>10 
order by 班级人数 asc -- 将班级中按班级人数分组之后,分组之后班级人数>10的班级找出
                     -- order by 可以使用列名因为select语句已经执行完毕
      

3. select语句的处理顺序

  1. FROM
  2. ON
  3. JOIN
  4. WHERE
  5. GROUP BY
  6. WITH CUBE 或 WITH ROLLUP
  7. HAVING
  8. SELECT
  9. DISTINCT
  10. ORDER BY
  11. TOP

猜你喜欢

转载自blog.csdn.net/ABC13222880223/article/details/82081751