搞定SQL!5个棘手SQL查询的解决方法
全文共3023字 , 预计学习时长8分钟
本文插图
图源:unsplash
对于数据科学家来讲 , SQL(结构化查询语言)是其工具箱中最重要的工具之一 。 掌握SQL不仅有助于你在面试中脱颖而出 , 而且通过解决复杂查询达到对SQL的充分理解 , 还能在让你许多竞争中保持领先地位 。
本文就将介绍5个有关SQL的棘手问题和其解决方法 。 注意 , 每个查询都能以不同方式编写 。 在参考本文解决方案之前 , 你可以先试着自己思考一下 。
本文插图
查询1
下列表格由名字和职业两列组成 。 需要查询所有姓名 , 且使其后紧跟一个括号 , 括住“职业”列中对应的首字母 。
本文插图
· 本文解决方案
SELECT CONCAT(Name, ’(‘, SUBSTR(Profession, 1, 1), ’)’) FROM table;
由于需要把名字和职业结合起来 , 可以使用CONCAT 。 而且因为括号内只需要一个字母 , 可以使用SUBSTR来传递列名、开始索引和结束索引 。 因为只需要首字母 , 所以我们将传递1 , 1(开始索引包括在内 , 结束索引不包括在内) 。
本文插图
查询2
蒂娜需要从她创建的EMPLOYEES表中计算所有员工的平均工资 , 但结果显示的平均值很低 , 这可能是键盘上的回零键失效了 。 她希望我们帮助找出错误计算的平均值和实际平均值之间的差异 。 我们须编写一个查找错误的查询(实际平均值-计算平均值) 。
本文插图
· 本文解决方案
SELECT AVG(Salary) - AVG(REPLACE(Salary, 0, ’’)) FROM table;
需要注意 , 只有一个表包含了实际工资值 。 为了创建错误场景 , 使用REPLACE替换0 。 接着传递列名、替换值以及用于替换REPLACE方法的值 。 然后 , 使用聚集函数AVG来求平均值的差 。
本文插图
查询3
给定一个表 , 它是由节点和父节点两列组成的二元搜索树 。 需要编写一个查询 , 以返回按节点值进行升序排序的节点类型 。 有3种类型:
· 根(Root)——如果节点是根
· 叶(Leaf)——如果节点是叶
· 内部(Inner)——如果节点既不是根也不是叶
本文插图
· 本文解决方案
经过初步分析 , 可以得出结论:如果给定节点N的相应P值为NULL(空) , 则它是根 。 而如果给定节点N存在于P列中 , 则它不是内部节点 。 基于此想法编写一个查询 。
SELECT CASE WHEN P IS NULL THENCONCAT(N, ' Root') WHEN N IN (SELECTDISTINCT P from BST) THEN CONCAT(N, ' Inner') ELSE CONCAT(N, ' Leaf') END FROM BST ORDER BY N asc;
可使用CASE作为开关函数 。 正如前文提到的 , 如果对于给定节点N , P为空值 , 则N是根 。 因此 , 我们使用CONCAT来组合节点值和标签 。
类似地 , 如果给定节点N存在于P列中 , 则它是内部节点 。 为了获得P列中的所有节点 , 我们编写了一个返回P列中所有不同节点的子查询 。 由于要求按节点值升序对输出进行排序 , 因此要使用ORDER BY子句 。
- 办公资源说开会再也不用纸和笔!华为手机自带会议神器,轻松搞定会议纪要
- 上海宝山|10月“园艺大讲堂”开始报名啦 25个免费名额先到先得
- 房地产|前9月全国商品房销售额11.5万亿元,均价连续5个月回升
- 央视新闻客户端|近5个月仍未平息 美国警察与抗议者再发生冲突
- DNF心情屋|DNF:“似雨幽离”有多豪?买了5个顶级账号,+17红字已成最低“似雨幽离”有多豪?买了5个顶级账号,+17增幅红字已成最低
- 日常穿搭|相见恨晚的西装外套,4招搞定日常穿搭,直接让你变得时髦有个性
- 医生|这5个“医学专业”火了!就业率高薪资待遇好,你选对了吗?
- 教育放大镜|不考研很难就业的5个本科专业,你“中招”了吗?,大学里
- 电影胡侃|搞定学习科目最难的语文, 只需要两招, 轻松100分
- 大学生|大学里吃“青春饭”的5个专业,越老越心酸,大学生要做好规划