🎉欢迎您来到我的MySQL基础复习专栏
☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹
✨博客主页:小小恶斯法克的博客
🎈该系列文章专栏:力扣刷题讲解-MySQL
🍹文章作者技术和水平很有限,如果文中出现错误,希望大家能指正🙏
📜 感谢大家的关注! ❤️
目录
变更性别
合作过至少三次的演员和导演
变更性别
Salary
表:+-------------+----------+ | Column Name | Type | +-------------+----------+ | id | int | | name | varchar | | sex | ENUM | | salary | int | +-------------+----------+ id 是这个表的主键(具有唯一值的列)。 sex 这一列的值是 ENUM 类型,只能从 ('m', 'f') 中取。 本表包含公司雇员的信息。
请你编写一个解决方案来交换所有的 'f'
和 'm'
(即,将所有 'f'
变为 'm'
,反之亦然),仅使用 单个 update 语句 ,且不产生中间临时表。
注意,你必须仅使用一条 update 语句,且 不能 使用 select 语句。
结果如下例所示。
示例 1:
输入: Salary 表: +----+------+-----+--------+ | id | name | sex | salary | +----+------+-----+--------+ | 1 | A | m | 2500 | | 2 | B | f | 1500 | | 3 | C | m | 5500 | | 4 | D | f | 500 | +----+------+-----+--------+ 输出: +----+------+-----+--------+ | id | name | sex | salary | +----+------+-----+--------+ | 1 | A | f | 2500 | | 2 | B | m | 1500 | | 3 | C | f | 5500 | | 4 | D | m | 500 | +----+------+-----+--------+ 解释: (1, A) 和 (3, C) 从 'm' 变为 'f' 。 (2, B) 和 (4, D) 从 'f' 变为 'm' 。
为了交换所有的 'f' 和 'm',我们可以使用以下步骤:
- 使用 UPDATE 语句更新 Salary 表。
- 在 SET 子句中,将 sex 列设置为 CASE WHEN 条件表达式。
- 在 CASE WHEN 中,检查当前值是否为 'm',如果是,则将其更改为 'f';如果不是,则将其更改为 'm'。
- 不需要 WHERE 子句,因为我们要更新整个表。
下面是具体的 SQL 查询语句:
UPDATE Salary SET sex = CASE WHEN sex = 'm' THEN 'f' ELSE 'm' END;
这条 SQL 查询语句将会更新整个 Salary 表,将所有 'f' 变为 'm',将所有 'm' 变为 'f'。
合作过至少三次的演员和导演
ActorDirector
表:+-------------+---------+ | Column Name | Type | +-------------+---------+ | actor_id | int | | director_id | int | | timestamp | int | +-------------+---------+ timestamp 是这张表的主键(具有唯一值的列).
编写解决方案找出合作过至少三次的演员和导演的 id 对 (actor_id, director_id)
示例 1:
输入: ActorDirector 表: +-------------+-------------+-------------+ | actor_id | director_id | timestamp | +-------------+-------------+-------------+ | 1 | 1 | 0 | | 1 | 1 | 1 | | 1 | 1 | 2 | | 1 | 2 | 3 | | 1 | 2 | 4 | | 2 | 1 | 5 | | 2 | 1 | 6 | +-------------+-------------+-------------+ 输出: +-------------+-------------+ | actor_id | director_id | +-------------+-------------+ | 1 | 1 | +-------------+-------------+ 解释: 唯一的 id 对是 (1, 1),他们恰好合作了 3 次。
要找出合作过至少三次的演员和导演的 id 对,我们可以使用以下步骤:
- 使用 GROUP BY 语句按照 actor_id 和 director_id 对 ActorDirector 表进行分组。
- 对它们进行分组后的结果是分成三组的,如下图
- 使用 HAVING 子句筛选出合作次数大于等于三次的组。
- 在 HAVING 子句中,使用 COUNT(*) 函数来计算每个组的合作次数,并将其与 3 进行比较。
- SELECT actor_id 和 director_id 作为结果。
下面是具体的 SQL 查询语句:
SELECT actor_id, director_id FROM ActorDirector GROUP BY actor_id, director_id HAVING COUNT(*) >= 3;
这条 SQL 查询语句将会在 ActorDirector 表中找出所有合作过至少三次的演员和导演的 id 对。
希望对你有帮助!