SQL 系列之 行转列

一共有三张表

t_goods 物品表    t_category 类别表      t_color 颜色表

结构如下:


问题1:查询 每个分类下的总数是多少

SELECT t.`name`,SUM(total) sum_total FROM t_goods g,t_category t WHERE g.type=t.id GROUP BY t.`name`;

每个分类下 肯定用到了分组,总数肯定用sum函数


问题2:查询 每个分类下平均数前2名的类别是哪些

SELECT c.`name`,AVG(total) avg_count FROM t_goods g,t_category c WHERE c.id=g.type GROUP BY type  ORDER BY avg_count DESC LIMIT 2 ;


问题3:查询出每个分类下各个颜色下的总和

SELECT ss.tcName,
MAX(CASE ss.cName WHEN
'红色' THEN ss.total ELSE 0 END) AS '红色',
MAX(CASE ss.cName WHEN
'紫色' THEN ss.total ELSE 0 END) AS '紫色',
MAX(CASE ss.cName WHEN
'蓝色' THEN ss.total ELSE 0 END) AS '蓝色',
MAX(CASE ss.cName WHEN
'金色' THEN ss.total ELSE 0  END) AS '金色'
FROM (
SELECT t.`name` tcName,c.`name` cName,SUM(g.total) total,g.type,g.color FROM t_goods g,t_category t,t_color c WHERE g.type=t.id AND g.color=c.id GROUP BY g.type,g.color) ss
group by ss.tcName


此题用到了行转列自认为 

=======================================================================================================================

结果:1.


结果:2


结果:3
利用sql 查询出的结果1

SELECT ss.tcName,
 ss.cName,
ss.total FROM (
SELECT t.`name` tcName,c.`name` cName,SUM(g.total) total,g.type,g.color FROM t_goods g,t_category t,t_color c WHERE g.type=t.id AND g.color=c.id GROUP BY g.type,g.color) ss;

结果 


进行行转列

后 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想起来就写写

对比有帮助的话,实力允许的话!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值