繁体   English   中英

跨多个表获取不同值的计数(MySQL)

[英]Getting count of distinct values across multiple tables (MySQL)

我有一个基本看起来像这样的数据库:

Table `person_dir`:
int person_ID
varchar firstname
varchar lastname
enum division

Table `prod_staff`:
int prod_ID
int staff_ID
int role_ID

Table `prod_cast`:
int prod_ID
int cast_ID
varchar role_name

我想做的是根据工作人员或演员的参与制作数量,确定给定部门的前10名人员。 一个人既可以同时担任职员又可以在给定的作品中担任演员,因此仅获得两个COUNT并不能给出准确的数字。

我的查询如下所示:

SELECT pers_ID, firstname, lastname,
    COUNT(DISTINCT prod_ID) FROM (
            (SELECT prod_ID 
             FROM prod_staff 
             WHERE staff_ID = person_dir.person_ID)
            UNION
            (SELECT prod_ID
             FROM prod_cast 
             WHERE cast_ID = person_dir.person_ID)
        ) AS maxnum
    FROM person_dir
    WHERE division = 'north'
    ORDER BY maxnum DESC
    LIMIT 10

当我尝试运行它时,出现错误,提示“ FROM person_dir”所在的行存在语法错误。 仅在查询中运行COUNT即可,因此我必须将其嵌入错误。 在发现错误方面的任何帮助将不胜感激。

相关的子查询需要具有SELECT语句,并用括号括起来。 但是您不能将关联深度嵌套2个级别,因此您编写的内容将行不通。

您可以改为与子查询结合使用,该子查询获取每个ID的计数。

SELECT person_ID, firstname, lastname, maxnum
FROM person_dir
JOIN (
    SELECT person_ID, COUNT(*) AS maxnum FROM (
        SELECT staff_ID AS person_ID, prod_ID 
        FROM prod_staff 
        UNION
        SELECT cast_ID AS person_ID, prod_ID
        FROM prod_cast 
    ) AS x
    GROUP BY person_ID
) AS prodcount ON prodcount.person_ID = person_dir.person_ID
WHERE division = 'north'
ORDER BY maxnum DESC
LIMIT 10

您不需要COUNT(DISTINCT)因为UNION默认会删除重复项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM