簡體   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