今天碰到一个有趣的题目,这真熬人啊,脑思路没写注释前,间接性宕机 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.城市);