2016-02-03 3 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 ... 

вала как: 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 лучше. Спасибо, в любом случае! –

Смежные вопросы