SQL练习五(列转行)

Postgresql数据库

现有一张表如图:

在这里插入图片描述
编写 SQL 查询,显示结果类型根据名分成一行,并用 , 隔开
结果图如下:
在这里插入图片描述
源码

CREATE TABLE TABLE6 (
  "ID" INT,
  "NAME" VARCHAR(36),
  "TYPE" VARCHAR(36)
);

INSERT INTO TABLE6  VALUES ('1', '小明', '步行');
INSERT INTO TABLE6  VALUES ('2', '小明', '步行');
INSERT INTO TABLE6  VALUES ('3', '小明', '自行车');
INSERT INTO TABLE6  VALUES ('4', '小明', '汽车');
INSERT INTO TABLE6  VALUES ('5', '小红', '步行');
INSERT INTO TABLE6  VALUES ('6', '小红', '轮船');
INSERT INTO TABLE6  VALUES ('7', '小黑', '汽车');
INSERT INTO TABLE6  VALUES ('8', '小黑', '飞机');
INSERT INTO TABLE6  VALUES ('9', '小黑', null);

SELECT * FROM TABLE6 ;

方法

SELECT NAME,STRING_AGG(TYPE,',') AS TYPE FROM TABLE6 GROUP BY NAME;

如果有重复数据你会发现是这样的结果
在这里插入图片描述

如果想去重复数据在加一个DISTINCT即可解决

SELECT NAME,STRING_AGG(DISTINCT TYPE,',') AS TYPE FROM TABLE6 GROUP BY NAME

总结:欢迎有其他方法的小伙伴来讨论!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值