题目:
(1). 前置条件:
有如下数据集A,表查询结果如下图所示,设置该表为表:test_province_city。
文章图片
(2). 题目要求:
数据集A,按照省市区分别显示为3列,为省一级时,后面没有下一级,则后两列为空,为市一级,后面没有下一级,则后一列为空。
预期结果:
文章图片
解题思路:
(1). 第1个union all的子查询,查询出省一级的信息
查询结果如下:
NAME_1NAME_2NAME_3
浙江
安徽
(2). 第2个union all的子查询,查询出市二级的信息
查询结果如下:
NAME_1NAME_2NAME_3
浙江杭州
浙江宁波
安徽合肥
安徽宣城
(3). 第3个union all的子查询,查询出区三级的信息
查询结果如下:
NAME_1NAME_2NAME_3
浙江杭州滨江
浙江杭州富阳
浙江杭州萧山
(4). 最后按照省、市NAME进行正序排列
查询结果如预期结果所示
解题方式一:
适用于不用创建物理表的情况下
使用数据集A,B,C,D,E,F替代物理表:test_province_city,直接复制以下 Mysql 语句,可以在 Mysql 或 Hive sql 环境直接运行,得到以上预期结果数据。
select NAME_1,
NAME_2,
NAME_3
from (select NAME AS NAME_1,
'' AS NAME_2,
'' AS NAME_3
from (select 1 ID,10000 CODE,'浙江' NAME,0 PARENTCODE
union all
select 2 ID,20000 CODE,'安徽' NAME,0 PARENTCODE
union all
select 3 ID,11000 CODE,'杭州' NAME,10000 PARENTCODE
union all
select 4 ID,12000 CODE,'宁波' NAME,10000 PARENTCODE
union all
select 5 ID,21000 CODE,'合肥' NAME,20000 PARENTCODE
union all
select 6 ID,22000 CODE,'宣城' NAME,20000 PARENTCODE
union all
select 7 ID,11100 CODE,'萧山' NAME,11000 PARENTCODE
union all
select 8 ID,11300 CODE,'滨江' NAME,11000 PARENTCODE
union all
select 9 ID,11300 CODE,'富阳' NAME,11000 PARENTCODE
)A where PARENTCODE=0union all
select B.NAME AS NAME_1,
C.NAME AS NAME_2,
'' AS NAME_3
from (select 1 ID,10000 CODE,'浙江' NAME,0 PARENTCODE
union all
select 2 ID,20000 CODE,'安徽' NAME,0 PARENTCODE
union all
select 3 ID,11000 CODE,'杭州' NAME,10000 PARENTCODE
union all
select 4 ID,12000 CODE,'宁波' NAME,10000 PARENTCODE
union all
select 5 ID,21000 CODE,'合肥' NAME,20000 PARENTCODE
union all
select 6 ID,22000 CODE,'宣城' NAME,20000 PARENTCODE
union all
select 7 ID,11100 CODE,'萧山' NAME,11000 PARENTCODE
union all
select 8 ID,11300 CODE,'滨江' NAME,11000 PARENTCODE
union all
select 9 ID,11300 CODE,'富阳' NAME,11000 PARENTCODE
)B join
(select 1 ID,10000 CODE,'浙江' NAME,0 PARENTCODE
union all
select 2 ID,20000 CODE,'安徽' NAME,0 PARENTCODE
union all
select 3 ID,11000 CODE,'杭州' NAME,10000 PARENTCODE
union all
select 4 ID,12000 CODE,'宁波' NAME,10000 PARENTCODE
union all
select 5 ID,21000 CODE,'合肥' NAME,20000 PARENTCODE
union all
select 6 ID,22000 CODE,'宣城' NAME,20000 PARENTCODE
union all
select 7 ID,11100 CODE,'萧山' NAME,11000 PARENTCODE
union all
select 8 ID,11300 CODE,'滨江' NAME,11000 PARENTCODE
union all
select 9 ID,11300 CODE,'富阳' NAME,11000 PARENTCODE
)C on B.CODE = C.PARENTCODE and B.PARENTCODE=0union all
select D.NAME AS NAME_1,
E.NAME AS NAME_2,
F.NAME AS NAME_3
from (select 1 ID,10000 CODE,'浙江' NAME,0 PARENTCODE
union all
select 2 ID,20000 CODE,'安徽' NAME,0 PARENTCODE
union all
select 3 ID,11000 CODE,'杭州' NAME,10000 PARENTCODE
union all
select 4 ID,12000 CODE,'宁波' NAME,10000 PARENTCODE
union all
select 5 ID,21000 CODE,'合肥' NAME,20000 PARENTCODE
union all
select 6 ID,22000 CODE,'宣城' NAME,20000 PARENTCODE
union all
select 7 ID,11100 CODE,'萧山' NAME,11000 PARENTCODE
union all
select 8 ID,11300 CODE,'滨江' NAME,11000 PARENTCODE
union all
select 9 ID,11300 CODE,'富阳' NAME,11000 PARENTCODE
)D JOIN
(select 1 ID,10000 CODE,'浙江' NAME,0 PARENTCODE
union all
select 2 ID,20000 CODE,'安徽' NAME,0 PARENTCODE
union all
select 3 ID,11000 CODE,'杭州' NAME,10000 PARENTCODE
union all
select 4 ID,12000 CODE,'宁波' NAME,10000 PARENTCODE
union all
select 5 ID,21000 CODE,'合肥' NAME,20000 PARENTCODE
union all
select 6 ID,22000 CODE,'宣城' NAME,20000 PARENTCODE
union all
select 7 ID,11100 CODE,'萧山' NAME,11000 PARENTCODE
union all
select 8 ID,11300 CODE,'滨江' NAME,11000 PARENTCODE
union all
select 9 ID,11300 CODE,'富阳' NAME,11000 PARENTCODE
)E ON D.CODE=E.PARENTCODE AND D.PARENTCODE=0
JOIN (select 1 ID,10000 CODE,'浙江' NAME,0 PARENTCODE
union all
select 2 ID,20000 CODE,'安徽' NAME,0 PARENTCODE
union all
select 3 ID,11000 CODE,'杭州' NAME,10000 PARENTCODE
union all
select 4 ID,12000 CODE,'宁波' NAME,10000 PARENTCODE
union all
select 5 ID,21000 CODE,'合肥' NAME,20000 PARENTCODE
union all
select 6 ID,22000 CODE,'宣城' NAME,20000 PARENTCODE
union all
select 7 ID,11100 CODE,'萧山' NAME,11000 PARENTCODE
union all
select 8 ID,11300 CODE,'滨江' NAME,11000 PARENTCODE
union all
select 9 ID,11300 CODE,'富阳' NAME,11000 PARENTCODE
)F ON E.CODE=F.PARENTCODE
)G ORDER BY NAME_1,NAME_2;
解题方式二:
适用于先创建物理表:test_province_city 的情况下
将测试数据 insert 至 test_province_city 表。
表数据结果如下:
文章图片
将解题方式一中的数据集A,B,C,D,E,F替换成表 test_province_city即可。
select NAME_1,
NAME_2,
NAME_3
from (select NAME AS NAME_1,
'' AS NAME_2,
'' AS NAME_3
from test_province_city A where PARENTCODE=0
union all
select B.NAME AS NAME_1,
C.NAME AS NAME_2,
'' AS NAME_3
from test_province_city B join
test_province_city C on B.CODE = C.PARENTCODE and B.PARENTCODE=0
union all
select D.NAME AS NAME_1,
E.NAME AS NAME_2,
F.NAME AS NAME_3
from test_province_city D JOIN
test_province_city E ON D.CODE=E.PARENTCODE AND D.PARENTCODE=0
JOIN test_province_city F ON E.CODE=F.PARENTCODE
)G ORDER BY NAME_1,NAME_2;
解题思想归纳:
1.第1个子查询,查询出省一级的信息,查询结果如下:
NAME_1NAME_2NAME_3
浙江
安徽
2.第2个子查询,查询出市二级的信息,查询结果如下:
NAME_1NAME_2NAME_3
浙江杭州
浙江宁波
安徽合肥
安徽宣城
3.第3个子查询,查询出区三级的信息,查询结果如下:
NAME_1NAME_2NAME_3
浙江杭州滨江
浙江杭州富阳
浙江杭州萧山
最后将这3部分的查询结果进行union all,然后按照省、市的NAME进行正序排列,最终得到如期的预期结果。
欢迎关注【无量测试之道】公众号,回复【领取资源】
Python+Unittest框架API自动化、
Python+Unittest框架API自动化、
Python+Pytest框架API自动化、
Python+Pandas+Pyecharts大数据分析、
Python+Selenium框架Web的UI自动化、
Python+Appium框架APP的UI自动化、
Python编程学习资源干货、
Vue前端组件化框架开发、
资源和代码 免费送啦~
文章下方有公众号二维码,可直接微信扫一扫关注即可。
备注:我的个人公众号已正式开通,致力于IT互联网技术的分享。
包含:数据分析、大数据、机器学习、测试开发、API接口自动化、测试运维、UI自动化、性能测试、代码检测、编程技术等。
微信搜索公众号:“无量测试之道”,或扫描下方二维码:
文章图片
【SQL|这道 Mysql 的解题思想,值得学习!】添加关注,让我们一起共同成长!
推荐阅读
- Python学习|GitHub原生AI代码生成工具Copilot的试用记录
- python|GitHub原生AI代码生成工具Copilot,官方支持Visual Studio 2022
- 数据库|让 AI 为你写代码 - 体验 Github Copilot
- 有趣的库|Pycharm GitHub Copilot python 代码建议和代码补全
- c++|(C++)使用链表编写图书管理系统
- python|python-OpenCV-人脸、眼睛,微笑检测
- python-opencv|7.python-opencv图像张贴
- python-opencv|python-opencv边缘检测
- 力扣算法题-python|力扣算法题总结(python)—二分查找