У меня есть одна таблица продуктов с несколькими полями, которые содержат оценки пользователей различных атрибутов:Запрашивание Графы значений полей в одной таблице
product | attr_1_eval | attr_2_eval | attr_3_eval
ABC | Correct | Incorrect | Null
DEF | Incorrect | Null | Null
XYZ | Undetermined | Null | Incorrect
123 | Null | Undetermined | Correct
456 | Incorrect | Correct | Correct
Мне нужно написать запрос, который насчитывает до тех атрибут оценки по всем продукты (где не равно нулю):
evaluation | correct | incorrect | undetermined
attr_1 | 1 | 2 | 1
attr_2 | 1 | 1 | 1
attr_3 | 2 | 1 | 0
Это SQL получает меня часть пути туда:
SELECT
SUM(CASE WHEN attr_1_eval = 'Correct' then 1 else 0 END) AS correct,
SUM(CASE WHEN attr_1_eval = 'Incorrect' then 1 else 0 END) AS incorrect,
SUM(CASE WHEN attr_1_eval = 'Undetermined' then 1 else 0 END) AS undetermined,
SUM(CASE WHEN attr_2_eval = 'Correct' then 1 else 0 END) AS correct,
...
FROM product
Но он не группирует attr_1, attr_2..
строками с числом ошибок в столбцах (как в желаемом наборе результатов выше). Я использую Postgres, но помощь в любом вкусе SQL была бы очень желанной.
Я просто собирался опубликовать это. Единственное изменение, которое я бы сделал, - это заменить «UNION» на «UNION ALL», так как статические «attr_1», «attr_2», «attr_3», убедитесь, что записи разные. – Lamak
Отлично работает в Postgres, включая «UNION All» за @Lamak. Благодаря! –