610. 判断三角形
问题链接
解题思路
题目要求:对每三个线段报告它们是否可以形成一个三角形。以 任意顺序 返回结果表。
对于三个线段能否组成三角形的判定:任意两边之和大于第三边,对于这个表内的记录,要求就是(x+y>z,x+z>y,y+z>x)。再看最后生成的结果,需要生成一个新字段triangle
这个很简单,我们使用case语句即可搞定
SELECT x,y,z,
CASE
WHEN x+y>z AND x+z>y AND y+z>x THEN "Yes"
ELSE "No"
END AS triangle
FROM Triangle;
619. 只出现一次的最大数字
问题链接
解题思路
找出最大的 单一数字 。如果不存在 单一数字 ,则返回 null 。
这个问题解题步骤就是先找到表内的单一数据集【没有就返回null】,并从单一数据集内提取出最大的数据。
解题思路很简单:
- 找到单一数据集合
根据num数据分组,找到COUNT(num)为1的数据集合 - 使用查询语句,从数据集合内使用MAX函数提取最大的数据
代码如下:
SELECT MAX(num) AS num FROM
(SELECT num FROM MyNumbers
GROUP BY num
HAVING COUNT(num)=1) AS unique_nums;
620. 有趣的电影
问题链接
解题思路
题目要求:编写解决方案,找出所有影片描述为 非 boring (不无聊) 的并且 id 为奇数 的影片。返回结果按 rating 降序排列。
我觉得这个题目考的就是根据字段关键词反向匹配,正向匹配还有排序。这里我们可以来构造匹配条件
非 boring :description !=“boring”
id 为奇:id % 2 != 0
排序:ORDER BY rating DESC
sql语句如下:
SELECT * FROM cinema WHERE description !="boring" AND id % 2 != 0
ORDER BY rating DESC
;
627. 变更性别
问题链接
解题思路
题目要求:请你编写一个解决方案来交换所有的 ‘f’ 和 ‘m’ (即,将所有 ‘f’ 变为 ‘m’ ,反之亦然),仅使用 单个 update 语句 ,且不产生中间临时表。注意,你必须仅使用一条 update 语句,且 不能 使用 select 语句。
思路:这道题其实就是检测我们update语句和CASE语句的使用
update语句的基本语法是:
UPDATE 表名
SET 列1 = 值1, 列2 = 值2, ...
[WHERE 条件];
CASE语句基本语法就是:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
WHEN conditionN THEN resultN
ELSE default_result
END
先来构建CASE语句
CASE
WHEN sex = "f" THEN "m"
WHEN SEX = "m" THEN "f"
END
再来构建UPDATE语句
UPDATE Salary
SET sex=(这里填上刚刚的case语句即可)
;
搞定!
完整的sql语句如下:
UPDATE Salary
SET sex=
CASE
WHEN sex = "f" THEN "m"
WHEN SEX = "m" THEN "f"
END;
1050. 合作过至少三次的演员和导演
问题链接
解题思路
问题要求:编写解决方案找出合作过至少三次的演员和导演的 id 对 (actor_id, director_id)
这道题其实考的就是GROUP BY分组的使用
每一条记录表示一个演员与导演合作,那么已actor_id和director_id作为分组条件,再计算每组内的 数据量,即可找到合作次数>=3的d 对 (actor_id, director_id)
完整的sql语句如下:
SELECT actor_id,director_id
FROM ActorDirector
GROUP BY actor_id,director_id
HAVING COUNT(*)>=3;
总结
这几道题考的知识点主要有
- CASE语句的使用
- COUNT聚合函数
- GROUP BY 分组
- ORDER BY 排序
- UPDATE SET语句
这些都是非常简单常用的方法,需要熟练掌握。