这个都不知道的话就不用向下看了
多说一句,select后面的没有使用聚合函数的列必须出现在group by 后面。这个是新人常犯的错误。
2. group by和all关键字
只有在slect语句中有where子句时,all关键字才有意义
使用all关键字的时候,结果会显示group by子句产生的所有组,包括那些不符合where条件的。
3. group by 字段 with rollup
显示所选列中值的某一层次组合的汇总。
例如:成绩表s (grade,class,sname,score)
年级汇总
Select grade as 年级,avg(score) as 平均分 from s group by grade wirh rollup
班级汇总,然后年级汇总
Select grade as 年级,class as 班级,avg(score) as 平均分 from s group by grade,class wirh rollup
4. group by 字段 with cube
显示所选列中值的所有组合的汇总。
5. grouping()函数
聚合函数:当行由 CUBE 或 ROLLUP 运算符添加时,该函数将导致附加列的输出值为 1;当行不由 CUBE 或 ROLLUP 运算符添加时,该函数将导致附加列的输出值为 0。仅在与包含 CUBE 或 ROLLUP 运算符的 GROUP BY 子句相关联的选择列表中才允许分组。、
这个函数可以帮助我们把那些空值替换为我们想要显示的文字。例如:
Select case when (grouping(grade)=1) then ‘年级平均’ else grade end as 年级,
case when (grouping(class)=1) then ‘班级平均’ else class end as 班级,
avg(score) as 平均分 from s group by grade,class wirh rollup
6. 创建视图
with cube生成的结果数据会有很多行,为了更好的阅读,我们可以把这个结果放到视图里面。然后就可以根据我们的需要(where条件)从视图里面select。
7. group by …having…
where是对表中的数据(行)进行筛选,having是对满足where条件的组进行筛选。