mysql - 寻找连续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 年。感谢您对此的见解。如果在其他任何地方问过类似的问题,请指出正确的方向。
解决方案
所以你有演员、电影(作品)和每部电影的年份。我的方法是使用该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 年的演员。
希望这可以帮助!
推荐阅读
- javascript - 如何在 PDFMake 中的一行内呈现无序列表项
- html - 在 Boostrap 5 中,carousel 移动整页而不仅仅是他的图像
- django - Django 验证时隙
- android - 如果仅下载 android studio 命令行工具,如何获取 avd 系统路径?
- javascript - TCP 服务器的反发誓过滤器出现故障
- twitter-bootstrap - 如何在 Bootstrap 中访问 ScrollBarHelper 对象
- c# - C# 指数格式:强制第一个数字为零
- python - 用 Scipy 求解微分代数方程
- python - 使用 Selenium Python 单击下一步按钮时出错
- python - 我可以在 Python 中使用 set 的 update 方法来合并两个集合 (xy) 和 (yx) 吗?