MySQL - 任意行的 count()

标签 mysql sql

我有一个这样的erd:

erd

我希望所有 Actor 都与一位特定导演合作。
这是我的查询:

    SELECT 
    p.first_name, p.last_name, COUNT(r.movie_id) as working_number
FROM
    person p
          LEFT JOIN
    roles r ON r.person_id = p.id
WHERE
    r.movie_id IN (SELECT 
            r.movie_id
        FROM
            roles r
        WHERE
            role_type = 'Director'
                AND person_id = (SELECT 
                    id
                FROM
                    person
                WHERE
                    first_name = 'Quentin'
                        AND last_name = 'Tarantino'))
                        and r.role_Type = "Actor"
GROUP BY p.id;

这会检索工作编号大于 1 的 Actor 。
我也想要其他 Actor ,即使工作人数为 0。

最佳答案

您需要多个左连接,personrole 两次:

SELECT p.first_name, p.last_name, COUNT(pd.id) as working_number
FROM person p
LEFT JOIN role r ON r.person_id = p.id AND r.role_Type = 'Actor'
LEFT JOIN role rd ON rd.movie_id = r.movie_id AND rd.role_type = 'Director'
LEFT JOIN person pd ON pd.id = rd.person_id AND pd.first_name = 'Quentin' AND pd.last_name = 'Tarantino'
GROUP BY p.id, p.first_name, p.last_name

关于MySQL - 任意行的 count(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57275652/

相关文章:

mysql - 比较时间戳和 Carbon::now()->toTimeString()(不带秒)

mysql - 如何使用 sql-alchemy 从 Flask 应用程序连接到 mysql docker 容器

C# - 将数据库中保存的文件附加到电子邮件中

mysql - 计算 mySQL 中特定用户每天的条目数

sql - TSQL - 案例 - 值在?

sql - 如何创建一个可以选择搜索列的存储过程?

mysql - 当一个数据库的名称包含在另一个数据库中时连接两个数据库

mysql - 复合键是否比常规 ID 更好作为多个列上的键和唯一索引?

php - CKFinder 的几个警告

mysql - 嵌套 GROUP BY 优化