mysql实现分组、排序、汇总功能
1.问题描述:
对于2个业务表中数据进行关联查询时,想实现如下报表呈现的效果,需要实现的脚本语句。
2.脚本编辑
select
c.*
from
(select
coalesce(s.dept_name,'总计') as 部门,
count(s.dept_name) as 资源目录数
from op_irs_res o join stg_bmc_np_info s
on o.source_name = s.source_name
where s.id <=136
group by s.dept_name
with rollup) as c
order by field(部门,'总计'),c.资源目录数 desc
;
3.部分函数介绍
3.1 coalesce()的作用
- 将控制替换成其他值;
- 返回一个非空值
函数表达式: coalesce(exp_1,exp_2,…,exp_n)
功能: 依次参考各参数表达式,遇到非null值即停止并返回该值;如何所有表达式都是空值,将最终返回一个空值。
实例:
-- 1 单参数
select coalesce(user_id,A) from table1;
当user_id为null值时,将返回A,否则将返回user_id的实际值。
-- 2 多参数
select coalesce(user_id,user_name,B) from table2;
当user_id为null值,而user_name不为null值时,返回user_name的实际值;而user_id、user_name都为null值时,将返回 B。
3.2 order by field()的作用
- 自定义排序
函数表示式: order by field(column, column_value ) desc
功能: 将column中的一个值前置,去掉desc则为后置
实例:
select * from table3 order by field(name,'小明') desc;
此时,'小明’该值就会前置;如果desc去掉,则默认’小明’为后置。