在以下查詢中,我試圖從表中獲取數據:company
,classes_by_company
和person
。我在名稱爲company_id
的所有表中都有一個外鍵。在classes_by_company
表中,類可以有class_status
,可以是active
或inactive
。表person
及其相應的person_status
也是如此。我可以統計班級總人數和總人數,在此查找工作查詢:SQFIDDLE。在下面的查詢中,我試圖合併之前的查詢,但現在也計算總數爲class_status=ACTIVE
和person_status=ACTIVE
。我收到錯誤Not unique table/alias: 'c'
。我怎樣才能算出總人數和活躍班級和人員的總數? SQLFIDDLE在同一表中使用兩個不同值的計數
SELECT a.id, a.company_id, a.status, c.class_status, p.person_status,
c.total_count AS classes_per_company,
p.total_count AS employees_per_company,
c.active_count AS active_classes,
p.active_count AS active_instructors
FROM company a
LEFT JOIN (SELECT company_id, COUNT(*) as total_count
FROM classes_by_company
GROUP BY company_id) c
ON a.company_id = c.company_id
LEFT JOIN (SELECT company_id, COUNT(*) as active_count
FROM classes_by_company
WHERE class_status = 'ACTIVE'
GROUP BY company_id) c
ON a.company_id = c.company_id
LEFT JOIN (SELECT company_id, COUNT(*) as total_count
FROM person
GROUP BY company_id) p
ON a.company_id = p.company_id
LEFT JOIN (SELECT company_id, COUNT(*) as active_count
FROM person
WHERE person_status = 'ACTIVE'
GROUP BY company_id) p
ON a.company_id = c.company_id
表結構:
CREATE TABLE company
(
id int auto_increment primary key,
company_id int,
status varchar(20)
);
CREATE TABLE classes_by_company
(
id int auto_increment primary key,
company_id int,
class_name varchar(20),
class_status varchar(20)
);
CREATE TABLE person
(
id int auto_increment primary key,
employee_id int,
company_id int,
person_name varchar(20),
person_status varchar(20)
);
不能使用相同的別名爲兩個子查詢。做一個子查詢cactive和另一個ctotal ...你也必須對p做同樣的事情。 – Twelfth
接下來,您將遇到引用初始SELECT子句中不存在於您的聯合子查詢中的字段(即c.class_status,p.person_status)的問題。 – Zec