2022年10月更文挑战30-8-leetcode刷题1050-至少合作三次的演员和导演

220 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第30天,点击查看活动详情

leetcode刷题1050-至少合作三次的演员和导演

前文

本文内容为leetcode数据库类型题目,主要考察对于数据库查询及条件筛选相关知识的理解。本题目的题目序号为1050,题目链接为leetcode.cn/problems/ac…

题目信息

ActorDirector 表:

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| actor_id    | int     |
| director_id | int     |
| timestamp   | int     |
+-------------+---------+

timestamp 是这张表的主键.

写一条SQL查询语句获取合作过至少三次的演员和导演的 id 对 (actor_id, director_id)

题目分析

根据题目信息,我们需要查找至少合作了三次的演员及导演。表中主要包含了演员id、导演id、以及表的主键二者合作的时间。想要知道两个对应的演员及导演合作了多少次,很容易想到的解法为通过group by进行数据的分组。每一组演员和导演分为一组,也就是利用actor_id, director_id作为分组的元素。但题目要求并非是查询全部合作过的演员导演,而是查询合作超过三次的演员导演,也就是我们需要分组后再进行数据的筛选。当进行了数据分组,我们不能采用where语句进行条件查找,而是需要通过having对实际数据进行筛选。where需要使用在分组语句之前,是对原始语句的分组。而having则是可以对分组后数据进行我们需要的筛选,这是比较符合本题应用场景的使用方式。也就是我们利用having保证合作的次数要大于2,也就是获取所有至少合作了三次的演员和导演。本题目中的having也可以同过子查询实现,不过实际的查询语句要更为复杂。至此,本题目解题完毕。

解题答案

select actor_id,director_id
from ActorDirector
group by actor_id,director_id
having count(actor_id) > 2

image.png

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。