Mysql 横向数据表变纵向数据表

今天碰到一个有趣的题目,这真熬人啊,脑思路没写注释前,间接性宕机 n次。

如图:

 看一下,是不是凭借多年(7year+)的经验,是不是很简单?

真的有那么简单吗?

是的,就是有那么简单,只是花费了我1.5小时的时间而已,初次接触,确实我实力下降了。

要不你们先想想答案?

好了,下面就揭晓答案吧

 

这答案也没有在实际代码中运行过,也不知道是不是100%正确,如有路见不平拔刀相助 女侠者,日后必有重谢。

#查找收货人数总数,依据省份为北京的各个城市分类统计收货人数 再通过降序排序 得出表 aa
#查找省份为北京的各个城市男性收货人数总数,依据省份为北京的各个城市分类, 链接到学员表,且性别为男 的城市分类 收货地址人数总数 得出表 cc
#查找省份为北京的各个城市女性收货人数总数,依据省份为北京的各个城市分类, 链接到学员表,且性别为女 的城市分类 收货地址人数总数 得出表 dd
#拼接 cc dd表 且排序为 收货总数 升序排序 得出 ee 表
#全连接 aa 表 匹配  ee 表,因为aa表已是城市地址总数降序排序,匹配ee表时,优先匹配 排序靠前 城市 得出结果
select aa.省份,aa.城市,ee.sex,ee.sex_num from
(
 (select 省份,城市,count(*) as num from 地址表 as a where a.省份='北京' group by 城市 order by num desc ) as aa
INNER JOIN
(
(select  a3.省份,a3.城市,count(*) as sex_num,'男' sex from 地址表 as a3 left join 学员表 as s3 on a3.uid = s3.uid  
where s3.性别='男' and a3.省份 ='北京') as cc  
UNION ALL
(select  a3.省份,a3.城市,count(*) as sex_num,'女' sex from 地址表 as a3 left join 学员表 as s3 on a3.uid = s3.uid  
where s3.性别='女' and a3.省份 ='北京') as dd order by sex_num asc
) as ee
where aa.城市 = ee.城市);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值