一周MySQL集训day5:作业参考答案

1 项目七: 各部门工资最高的员工(难度:中等)

这题思路比较简单,就是先查询出每个部门最高的工资,然后再通过JOIN匹配部门信息
在这里插入图片描述

2 项目八: 换座位(难度:中等)

从最后结果来看就是 :
①id为偶数的需要往前挪
②id为奇数的需要往后挪
③再考虑最后一位是奇数还是偶数,奇数不变(发现偶数的情况已经包含在前面了)

通过 id%2=1 来判断是奇数。
这里需要注意的地方是,最后一位,我们在判断奇数往后挪的时候,是不包含最后一位的。所以在②的时候要限定 id 小于总个数。

PS:UNION 可以将多条SELECT组合成一个结果集。
在这里插入图片描述

3 项目九: 分数排名(难度:中等)

这里的排名是连续排名。将分数去重后的清单排名就是最终排名。然后将这个排名JOIN原始数据。
问题在于,怎么在去重的分数清单增加一列ID,这个ID会随着数据自动增加。这个可以通过参数化查询搞定,但是我们还没学,所以pass。
然后就有个取巧的办法。我们还是需要获取去重的分数清单,但是不需要排名ID了:
① 原始表里的最大值。 分数清单只取最大值,然后COUNT(),这样就只有1
② 原始表里的第二大值。 分数清单取最大值和第二大值,然后COUNT(
), 这样就是2

以此内推。
在code里就是 分数清单里的score要大于等于原始表的某个具体的值。

这个写法的缺点是,每一个原始表socre列的值,都需要重新扫描去重后的分数清单,在数据表大的情况下,性能会很差。

在这里插入图片描述

发布了48 篇原创文章 · 获赞 49 · 访问量 9218

猜你喜欢

转载自blog.csdn.net/qq_30006749/article/details/88314134
今日推荐