【问题标题】:How do I display all rows from a table and count from another table in MySQL如何在 MySQL 中显示一个表中的所有行并从另一个表中计数
【发布时间】:2021-07-08 02:52:18
【问题描述】:

我有一个演员列表,目标是显示演员演过多少“X”电影的数量,我还必须显示所有演员的名字,无论他们是否曾出演过“X”电影或不是。

这是我的表格供参考:

演员 |援助 | A_FNAME | A_LNAME | A_YOB

角色 |援助 |中 | R_ROLE

电影 |中 | M_NAME | M_YOR

到目前为止,我所拥有的是:

SELECT ALL A_FNAME, A_LNAME, COUNT(R_ROLE) AS "X FILMS"
 FROM ACTOR                                                  
 LEFT OUTER JOIN ROLE                                        
 ON ACTOR.A_ID = ROLE.A_ID                                   
 WHERE R_ROLE LIKE '%(X)%'                          
 GROUP BY A_FNAME, A_LNAME; 

它只输出在 X 电影中扮演过的演员,但是我需要它来显示我插入的所有演员。我该怎么做?

【问题讨论】:

  • 哪一栏是“X”片的信息?
  • R_ROLE 列有“X”电影的信息

标签: mysql sql count aggregation


【解决方案1】:

带有子查询:

select  A_FNAME, A_LNAME,(select count(*) from role where role.a_id =a.a_id and  R_ROLE LIKE '%(X)%'  )from actor a

加入

SELECT ALL A_FNAME, A_LNAME,coalesce( COUNT(R_ROLE),0) AS "X FILMS"
 FROM ACTOR                                                  
 LEFT OUTER JOIN (select * from ROLE WHERE R_ROLE LIKE '%(X)%') r                          
 ON ACTOR.A_ID = r.A_ID                                   
 GROUP BY A_FNAME, A_LNAME; 

这里使用coalesce() 将空值替换为0。

【讨论】:

    猜你喜欢
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 2013-06-17
    • 1970-01-01
    相关资源
    最近更新 更多