2016-02-03 34 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的解决方案更好。不管怎么说,还是要谢谢你! –