[英]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.