長時間用戶,第一次張貼海報。我發現了類似的問題/答案,通常涉及子查詢,但我不知道如何適用於我的情況。mysql - 兩個左連接 - 雙重計數
我有3個表:
table1
id
table2
id | val (each id has 1 of 3 possible values)
table3
id | val (each id has 1 of 3 possible values)
編輯:例如:(表1 =每個人的唯一的ID誰參加了一個主題公園,表2 =每個訪問者訪問了哪些景點第一;表3 =其吸引每個訪問者訪問第二)。
我想編寫一個查詢查找7個不同的計數: (1)在表1的唯一ID的數量 (2)讓每個可能的值在表2 ID數的計數(3具有每一個可能值的表3中的ID的數量)計數
我的MySQL查詢:
SELECT
count(DISTINCT table1.id) AS x1,
SUM(IF(table2.val='1'),1,0)) AS x2,
SUM(IF(table2.val='2'),1,0)) AS x3,
SUM(IF(table2.val='3'),1,0)) AS x4,
SUM(IF(table3.val='1'),1,0)) AS x5,
SUM(IF(table3.val='2'),1,0)) AS x6,
SUM(IF(table3.val='3'),1,0)) AS x7
FROM
table1
LEFT JOIN
table2 ON table1.id=table2.id
LEFT JOIN
table3 ON table1.id=table3.id
結果:
X1 =正確的(因爲DISTINCT)
X2,X3,X4 =正確
X5,X6,X7 = TWICE他們應該是多少(因爲我得到笛卡爾積?)
有什麼建議?
您是否考慮過在子查詢中單獨計算表,然後連接兩個子查詢的結果? –
這可能是我需要做的,但是我從來沒有做過再次選擇,也不知道如何以這種方式重新編寫我的查詢。 – egret
用戶錯誤。原來我在表2中有重複的記錄.ID應該是唯一的,但不能強制在表定義中。因此重複計算。感謝所有對此評論的人。嘗試每一個建議幫助我理解發生了什麼。 – egret