sql写法记录
GROUP_CONCAT(expr) 组连接函数
GROUP_CONCAT(expr) 组连接函数可以返回分组后指定字段的字符串连接形式,并且可以指定排序逻辑,以及连接字符串,默认为英文逗号连接。这里继续用 order_diy 表举例:sql 如下:
SELECT name, GROUP_CONCAT(title ORDER BY id desc SEPARATOR '-')
from order_diy GROUP BY name ORDER BY NULL;
查询结果:
如上我们通过 GROUP_CONCAT(title ORDER BY id desc SEPARATOR '-') 语句,指定分组连接 title 字段并按照 id 排序,设置连接字符串为 -
。
自连接查询
自连接查询是 sql 语法里常用的一种写法,掌握了自连接的用法我们可以在 sql 层面轻松解决很多问题。这里用 tree 表举例,结构以及表数据展示:
tree 表中通过 pid 字段与 id 字段进行父子关联,假如现在有一个需求,我们想按照父子层级将 tree 表数据转换成 一级职位 二级职位 三级职位
三个列名进行展示,sql 如下:
SELECT t1.job_name '一级职位', t2.job_name '二级职位', t3.job_name '三级职位'
from tree t1 join tree t2 on t1.id = t2.pid left join tree t3 on t2.id = t3.pid
where t1.pid = 0;
结果如下:
我们通过 tree t1 join tree t2 on t1.id = t2.pid 自连接展示 一级职位 二级职位
,再用 left join tree t3 on t2.id = t3.pid 自连接展示 二级职位 三级职位
,最后通过where 条件 t1.pid = 0过滤掉非一级职位的展示,完成这个需求。
with rollup 在分组统计数据的基础上再进行统计汇总
MySql 中可以使用 with rollup 在分组统计数据的基础上再进行统计汇总,即用来得到 group by 的汇总信息。这里继续用order_diy 表举例,sql 如下:
SELECT name, SUM(money) as money
FROM order_diy GROUP BY name WITH ROLLUP;
查询结果:
可以看到通过 GROUP BY name WITH ROLLUP 语句,查询结果最后一列显示了分组统计的汇总结果。但是 name 字段最后显示为 null,我们可以通过 coalesce(val1, val2, ...)
函数,这个函数会返回参数列表中的第一个非空参数。
SELECT coalesce(name, '总金额') name, SUM(money) as money
FROM order_diy GROUP BY name WITH ROLLUP;
查询结果:
转载自 https://juejin.cn/post/7209625823580766264
-------------------------------后续有新知识再更新