sql - SQLite - 从表中选择 3 个条件并 GROPING BY
问题描述
加入后我有这张表:
p_id |a_name |bY | city | a_id |p_id| role |t_name|p_id|
304804123|Shir |1980|beer sheba|304804123|111 |meri |Abima |111 |
304226152|Noa |1992|tel aviv |304226152|111 |sonia |Abima |111 |
251445841|Avi |1998|haifa |251445841|222 |tov tov |Miskan|222 |
204458952|Dani |1993|sderot |204458952|222 |gamad |Abima |222 |
221354875|Osher |1995|beer sheba|221354875|333 |prince |Akamri|333 |
304804123|Shir |1980|beer sheba|304804123|222 |princes |Abima |222 |
304804123|Shir |1980|beer sheba|304804123|333 |singar |Abima |333 |
304226152|Noa |1992|tel aviv |304226152|333 |singarit |Abima |333 |
304226152|Noa |1992|tel avia |304226152|333 |singarit2|Abima |333 |
我需要从表中得到所有演员姓名(a_name),他们至少演过三部戏(p_id),并且出生年份(bY)为 1980 年或以上。我可以根据下一个查询得到它:
SELECT a_name FROM (SELECT *, COUNT(Play.p_id) AS
COUNT_NUM_OF_PLAY_EACH_ACTOR
FROM Actor, Play, Role WHERE
Actor.a_id = Role.a_id AND Role.p_id = Play.p_id
GROUP BY a_name) WHERE COUNT_NUM_OF_PLAY_EACH_ACTOR >= 3
AND birthYear >= 1980;
结果:
Noa
Shir
但我的条件是,如果一名球员在同一个节目中出现多个角色,它仍然被视为一个节目。在我查询111、444、333节目中扮演的演员诺亚,却在333节目中演了2个角色,我怎么能把它当成一个节目呢?
期望的结果:
Noa <- remove this because noa played in 2 shows only and not 3.
Shir
解决方案
您可以使用不同的相同请尝试以下一个
SELECT a_name FROM (SELECT *, COUNT(distinct Play.p_id) AS
COUNT_NUM_OF_PLAY_EACH_ACTOR
FROM Actor, Play, Role WHERE
Actor.a_id = Role.a_id AND Role.p_id = Play.p_id
GROUP BY a_name) WHERE COUNT_NUM_OF_PLAY_EACH_ACTOR >= 3
AND birthYear >= 1980;
推荐阅读
- javascript - Node js 和 mongo , pre, post hook 中间件不在 findByIdAndUpdate 上执行
- azure-devops - 在多阶段yaml管道中将矩阵定义为变量
- android - Visual Studio ctrl+alt+Q (debug.quickWatch) 是否有任何等价物?
- angular - 如何在没有 moment.js 的情况下将字符串转换为日期
- python - 解析csv文件并拆分成子文件
- swift - DateFormatter/ISO8601DateFormatter 无法从字符串中获取日期
- python - 为什么我的curve_fit 达到maxfev = 10000?
- python - Tensorflow 2.0 未使用 Heroku 在 pipenv 上安装
- gcc - 在没有 .SUNW_syminfo 的情况下在 Solaris 上构建共享库以导出
- wordpress - 我无法更改我的 wordpress 网站的主页