2016-02-03 32 views
0

指望我有SQL查詢這樣的:MySQL查詢到從多個列

SELECT 
    CONCAT(t1.a, t2.a, t2.b, t3.a, t4.a, t4.b) AS val 
FROM 
    t1 
    LEFT JOIN t2 ON ... 
    LEFT JOIN t3 ON ... 
    LEFT JOIN t4 ON ... 

VAL輸出爲:0,1,0,1,2,1或1,2,0,1,0, 2,...(包括隨機順序中的0,1,2)

我希望每個數字的總數爲:0 => 2,1 => 3,2 => 1,無PHP代碼

+0

你究竟想知道什麼?我不知道該說些什麼,我認爲它已經完全清除了。我想計算每個值的顯示時間:0,1,2 –

回答

1

你可以簡單地包裹在一個子查詢現有查詢,並進行計數的出現外查詢;

SELECT 
    LENGTH(val) - LENGTH(REPLACE(val, '0', '')) zeros, 
    LENGTH(val) - LENGTH(REPLACE(val, '1', '')) ones, 
    LENGTH(val) - LENGTH(REPLACE(val, '2', '')) twos 
FROM (
    SELECT 
    CONCAT(t1.a, t2.a, t2.b, t3.a, t4.a, t4.b) AS val 
    FROM 
    t1 
    LEFT JOIN t2 ON ... 
    LEFT JOIN t3 ON ... 
    LEFT JOIN t4 ON ... 
); 
+0

完美。你拯救了我的生命。謝謝! –

0

您需要爲此使用UNION ALL

SELECT tbl.col1, COUNT(tbl.col1) 
FROM (
    SELECT t1.a as col1 
    FROM t1 
    UNION ALL 
    SELECT t2.a as col1 
    FROM t2 
    UNION ALL 
    SELECT t3.a as col1 
    FROM t3 
    ... 
) tbl 
GROUP BY tbl.col1; 

SQLFIDDLE DEMO

+0

這是一個很好的解決方案,但我認爲Joachim的解決方案更好。不管怎麼說,還是要謝謝你! –