https://leetcode.cn/problems/actors-and-directors-who-cooperated-at-least-three-times/description/
一,题目如下:
二,建表语句:
Create table If Not Exists ActorDirector (actor_id int, director_id int, timestamp int)
Truncate table ActorDirector
insert into ActorDirector (actor_id, director_id, timestamp) values ('1', '1', '0')
insert into ActorDirector (actor_id, director_id, timestamp) values ('1', '1', '1')
insert into ActorDirector (actor_id, director_id, timestamp) values ('1', '1', '2')
insert into ActorDirector (actor_id, director_id, timestamp) values ('1', '2', '3')
insert into ActorDirector (actor_id, director_id, timestamp) values ('1', '2', '4')
insert into ActorDirector (actor_id, director_id, timestamp) values ('2', '1', '5')
insert into ActorDirector (actor_id, director_id, timestamp) values ('2', '1', '6')
三,解题思路:
-
理解查询需求:
首先,明确查询的目的:找出在ActorDirector
表中,哪些演员(actor_id
)和导演(director_id
)的组合出现次数不少于3次。 -
选择合适的表和字段:
确认ActorDirector
表中包含actor_id
和director_id
字段,这些字段用于标识演员和导演的组合。 -
使用分组(GROUP BY):
利用GROUP BY
子句对演员和导演的组合进行分组,以便对每个组合的出现次数进行计数。 -
应用聚合函数(COUNT):
使用COUNT(*)
函数来计算每个分组(即每个演员和导演组合)的记录数。 -
使用过滤条件(HAVING):
通过HAVING
子句过滤出那些出现次数大于或等于3的组合。HAVING
子句用于对聚合结果进行条件过滤。
四,答案如下:
select actor_id,director_id
from ActorDirector
group by actor_id, director_id
having count(*)>=3
五,使用的相关知识点:
-
SQL基础:
理解SQL语言的基本结构和语法,包括
SELECT
、FROM
、GROUP BY
、HAVING
等子句。 -
聚合函数:
掌握聚合函数的使用方法,如
COUNT()
,用于计算分组内的记录数。 -
分组(GROUP BY):
理解
GROUP BY
子句的作用,即按照一个或多个列对结果集进行分组。 -
过滤条件(HAVING):
掌握
HAVING
子句的使用,它用于对聚合后的结果进行条件过滤,与WHERE
子句不同,HAVING
是在分组和聚合之后应用的。 -
索引优化:
了解索引的概念和作用,以及如何通过创建索引来提高查询性能。