sql行列转换_SQL试题六 行列转换

aaef10de4a96fa34d7a3ad6d7d44157e.png

行列转换

appchanneluser_cnt
36017
xiaomi15
AppStore20
vivo31

如何写一个SQL,输出如下格式的数据:

360xiaomiAppStorevivo
17152031

方法一 :union all

第一步
SELECT user_cnt as '360',0 as 'xiaomi',0 as 'appstore', 0  as 'vivo' 
FROM six_app WHERE appchannel = "360";

438570a8332953d6c99d641bbcf26e9a.png
SELECT 0 as '360',user_cnt as 'xiaomi',0 as 'appstore', 0  as 'vivo' 
FROM six_app WHERE appchannel = "xiaomi";

95307001c2f23302a155e88f0bd96fc2.png
SELECT 0 as '360',0 as 'xiaomi',user_cnt as 'appstore', 0  as 'vivo' 
FROM six_app WHERE appchannel = "appstore";

5a4940499af19128cab4fbd911eef077.png
SELECT 0 as '360',0 as 'xiaomi',0 as 'appstore', user_cnt as 'vivo' 
FROM six_app WHERE appchannel = "vivo";

7106f72bb68af222f245a42f19ecce1c.png
union all 连接,有重复使用all,先查询所有
SELECT * 
FROM(
SELECT user_cnt as '360',0 as 'xiaomi',0 as 'appstore', 0  as 'vivo' FROM six_app WHERE appchannel = "360"
UNION ALL
SELECT 0 as '360',user_cnt as 'xiaomi',0 as 'appstore', 0  as 'vivo' FROM six_app WHERE appchannel = "xiaomi"
UNION ALL
SELECT 0 as '360',0 as 'xiaomi',user_cnt as 'appstore', 0  as 'vivo' FROM six_app WHERE appchannel = "appstore"
UNION ALL
SELECT 0 as '360',0 as 'xiaomi',0 as 'appstore', user_cnt as 'vivo' FROM six_app WHERE appchannel = "vivo"
)tmp
;

94ef58d55bf45bc2590d19766f92c1f6.png
使用sum求和
SELECT SUM(tmp.360) '360',SUM(tmp.xiaomi) 'xiaomi',SUM(tmp.appstore)  'appstore',SUM(tmp.vivo) 'vivo'
FROM(
SELECT user_cnt as '360',0 as 'xiaomi',0 as 'appstore', 0  as 'vivo' FROM six_app WHERE appchannel = "360"
UNION ALL
SELECT 0 as '360',user_cnt as 'xiaomi',0 as 'appstore', 0  as 'vivo' FROM six_app WHERE appchannel = "xiaomi"
UNION ALL
SELECT 0 as '360',0 as 'xiaomi',user_cnt as 'appstore', 0  as 'vivo' FROM six_app WHERE appchannel = "appstore"
UNION ALL
SELECT 0 as '360',0 as 'xiaomi',0 as 'appstore', user_cnt as 'vivo' FROM six_app WHERE appchannel = "vivo"
)tmp
;

b84efde09c5d42d1320154a294908c5b.png

方法二 join

下面使用join方法
SELECT appchannel,user_cnt FROM six_app WHERE appchannel='360';

9cec10895e024493802d9dfffc16143a.png
SELECT appchannel,user_cnt FROM six_app WHERE appchannel='xiaomi';

1bcb17d0ab4a719f6a77ab171c0a3ec7.png
SELECT appchannel,user_cnt FROM six_app WHERE appchannel='appstore';

63185a6007800b4d1c3032c4f43dc65c.png
SELECT appchannel,user_cnt FROM six_app WHERE appchannel='vivo';

5ec7f783d3f67c6fc101ae6cdbe2b419.png
查询所有
SELECT * 
FROM
(SELECT user_cnt FROM six_app WHERE appchannel='360')t1
JOIN
(SELECT user_cnt FROM six_app WHERE appchannel='xiaomi')t2
JOIN
(SELECT user_cnt FROM six_app WHERE appchannel='appstore')t3
JOIN
(SELECT user_cnt FROM six_app WHERE appchannel='vivo')t4
;

575771f3d786e20b5d574b8760ba7954.png
结果
SELECT t1.user_cnt '360',t2.user_cnt 'xiaomi',t3.user_cnt 'appstore',t4.user_cnt 'vivo'
FROM
(SELECT user_cnt FROM six_app WHERE appchannel='360')t1
JOIN
(SELECT user_cnt FROM six_app WHERE appchannel='xiaomi')t2
JOIN
(SELECT user_cnt FROM six_app WHERE appchannel='appstore')t3
JOIN
(SELECT user_cnt FROM six_app WHERE appchannel='vivo')t4
;

9ae06cff10186d0f6794280dfdf7572d.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值