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 次。
方法 1:Group By 和 Count
MySQL
MySQL 思路
在 SQL 中,找到合作至少三次的演员导演对的查询是按照 actor_id 和 director_id 分组,然后过滤掉计数至少为 3 的对。
MySQL 算法
为了巩固算法背后的思想,让我们首先看一个例子:
一开始的 ActorDirector 表:
下表由 actor_id
和 director_id
组合得到,过滤后只包含至少 3 个的分组。
注意,我们只选择了 actor_id
和 director_id
列。
MySQL 实现
SELECT actor_id, director_id
FROM ActorDirector
GROUP BY actor_id, director_id
HAVING COUNT(timestamp) >= 3;