2016-09-30 2 views
0

У меня есть таблица для ввода пользователем вопросов. Им был предоставлен вариант дать до пяти ответов на один и тот же вопрос, поэтому у вас есть 5 полей с пятью различными ответами по одному и тому же вопросу.Выберите количество одинаковых значений в нескольких столбцах

Так field1, filed2, field3, Field4, Field5 все могли бы получить ответ «Foo»

Я хочу создать запрос, который будет возвращать счетчик числа от общего числа ответов в любом из пяти столбцов для всех пользователей для каждого возможного ответа.

Так что результат будет:

«Foo» 22 «Мне нравится торт» 32 «который заботится» 2

Я нахожусь на правильном пути со следующим, но я подозреваю, является более элегантным решением. Вот что я до сих пор:

SELECT field1,filed2,field3,field4,field5, 
     (sum(CASE WHEN field1='foo' THEN 1 ELSE 0 END) + 
     sum(CASE WHEN field2='foo' THEN 1 ELSE 0 END)) + 
     sum(CASE WHEN field3='foo' THEN 1 ELSE 0 END)) + 
     sum(CASE WHEN field4='foo' THEN 1 ELSE 0 END)) + 
     sum(CASE WHEN field5='foo' THEN 1 ELSE 0 END)) AS count 

    FROM items 
    GROUP BY field1,filed2,field3,field4,field5 
    ; 

Любые предложения были бы оценены.

+0

Если вы получите желаемый результат, этот запрос будет в порядке! – jarlh

+0

Есть ли способ сделать это, не указав значение поиска? В моем примере он ограничен «foo». Если бы я мог избавиться от «foo», и он выводит строку для каждого отдельного значения со счетом, то он будет более чистым. – kgrondell

+0

Добавьте некоторые данные таблицы образцов и ожидаемый результат. (Также форматированный текст.) – jarlh

ответ

1

Возможно, это то, что вам нужно. Получите производную таблицу, которая возвращает все столбцы UNION ALL -ed в один. Затем выполните GROUP BY:

select field, count(*) 
from 
(
    select field1 as field from items 
    union all 
    select field2 from items 
    union all 
    ... 
    select fieldn from items 
) dt 
group by field 
+0

Нужно добавить, где условие также подходит для каждого выбора 'foo'. – Susang

+0

Интересно. Я включу это и посмотрю, что я получу. Выглядит близко. – kgrondell

+0

@ Сура, это был не просто пример? Если необходимо, добавьте предложение WHERE непосредственно перед GROUP BY. – jarlh

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