首页 > 解决方案 > 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

标签: sqlsqlite

解决方案


您可以使用不同的相同请尝试以下一个

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;

推荐阅读