2012-10-18 43 views
4

是否有可能添加並乘以id相同的不同表的計數? 試想:添加和乘以幾個表的COUNT()

Table_1  Table_2 Table_3 
id   id   id 
1    1   1 
1    2   2 
2    2   3 
3    2   3 
3    2   3 
3    3   3 

這樣的最終結果將是此表2列:

id  (COUNT(Table_1.id) + 2*COUNT(Table_2.id) + 3*COUNT(Table_3.id)) 
1         7 
2         12 
3         17 

回答

2

我不知道如果我理解正確的,你但這給一個嘗試,

SELECT a.ID, 
     a.aa + (2 * b.bb) + (3 * c.cc) 
FROM 
    (
    SELECT ID, COUNT(*) aa 
    FROM table1 
    GROUP BY ID 
) a LEFT JOIN 
    (
    SELECT ID, COUNT(*) bb 
    FROM table2 
    GROUP BY ID 
) b ON a.ID = b.ID 
    LEFT JOIN 
    (
    SELECT ID, COUNT(*) cc 
    FROM table3 
    GROUP BY ID 
) c ON a.ID = c.ID 

SQLFiddle Demo

+0

LEFT JOIN是緩慢的,可能並沒有任何好處在這裏。 – AndreKR

+0

@AndreKR如果table1上的記錄在其他表上沒有匹配,該怎麼辦?它肯定會贏得;不會在名單上顯示。 –

+0

如果Table_3中的記錄在其他表上沒有匹配,該怎麼辦? – AndreKR

1
SELECT id, counts_1.number + 2 * counts_2.number + 3 * counts_3.number 
FROM 
(SELECT id, COUNT(*) AS number FROM Table_1 GROUP BY id) AS counts_1 
JOIN 
(SELECT id, COUNT(*) AS number FROM Table_2 GROUP BY id) AS counts_2 USING (id) 
JOIN 
(SELECT id, COUNT(*) AS number FROM Table_3 GROUP BY id) AS counts_3 USING (id) 

注意,這種解決方案需要每個ID在每個表中至少存在一次否則它將被排除在結果之外。改變這將需要MySQL無法完成的全外連接。雖然有ways around that limitation