首页 > 解决方案 > 寻找连续3年以上从未失业的演员

问题描述

我想一气呵成地找到那些从未失业超过 3 年的演员。(假设演员在连续两部电影之间保持失业)。

M_cast 代表演员,person 表有演员的名字,movie 表有年份列。

SQL code:

SELECT a.Name, c.year
FROM Person a
Inner Join M_cast b
ON a.PID = b.PID
Inner Join Movie c
ON c.MID = b.MID

这将为我们提供所有演员的姓名和他们工作的不同年份,但是,我不确定如何检查演员是否连续工作了 3 年。感谢您对此的见解。如果在其他任何地方问过类似的问题,请指出正确的方向。

标签: mysqlsql

解决方案


所以你有演员、电影(作品)和每部电影的年份。我的方法是使用该LEAD()函数添加一个新列next_year

该函数的一些背景知识:

LEAD() 是一个窗口函数,它提供对位于当前行之后的指定物理偏移处的行的访问。

例如,通过使用 LEAD() 函数,您可以从当前行访问下一行的数据,或者下一行之后的行,等等。

LEAD() 函数对于比较当前行的值和下一行的值非常有用。

下面显示了 LEAD() 函数的语法:

LEAD(return_value ,offset [,default])
OVER (
    [PARTITION BY partition_expression, ... ]
    ORDER BY sort_expression [ASC | DESC], ...
)

示例使用:

SELECT *
, LEAD(year, 1, 0) OVER (PARTITION BY Name ORDER BY year ASC) AS next_year
FROM (yourJoinedTable)

使用(next_year - year) AS gap您可以在电影之间创建一列空白(失业年数)。最后,找到MAX(gap)每个演员的 并过滤掉那些 a MAX(gap)≤ 3 的演员。这应该只剩下电影之间不超过 3 年的演员。

希望这可以帮助!


推荐阅读