码迷,mamicode.com
首页 > 数据库 > 详细

SQL学习之数据转换--行列转换_2

时间:2019-12-30 22:59:00      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:如何   img   strong   数据   core   course   sql   info   pos   

之前我已经写过行转列的文章可参考https://www.cnblogs.com/heisenburg/p/11624836.html

其他形式的行转列

    上面的文章中行专列的情形是players字段的数据类型为整数,如果字段数据类型为string类型的话,sum函数肯定是用不了了,那么怎么办呢?

这种问题其实数据库的开发者们早就想到了,而且有解决方案了。解决方案就是string_agg(),针对字符串类型的聚合函数。

如果有如下数据:

技术图片

    需要转换成如下形式:

技术图片

按照之前篇的方法,只要把sum()换成字符串聚合函数就行了,所以可以如下写:

SELECT 
name,
string_agg(case when course=‘语文‘ then grade else ‘‘ end,‘‘) as "语文",
string_agg(case when course=‘数学‘ then grade else ‘‘ end,‘‘) as "数学",
string_agg(case when course=‘英语‘ then grade else ‘‘ end,‘‘) as "英语"
from
dw_temp.score
group by name;

如果老板又有要求格式改成这样的:

技术图片

 又当如何呢,还是用string_agg即可实现:

SELECT 
name,
string_agg(grade,‘,‘) as "grade"
from
dw_temp.score
group by name;

如上两种形式的行转列的关键还是字符串的聚合函数,所以只要有了string_agg(field,[separator])就很容易实现了,这是postgre数据库中的函数,

如果使用的是mysql则有group_concat(Field,[separator]) 函数。

以上,希望能帮到大家!

SQL学习之数据转换--行列转换_2

标签:如何   img   strong   数据   core   course   sql   info   pos   

原文地址:https://www.cnblogs.com/heisenburg/p/12116193.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!