Я пытаюсь использовать GROUP BY для создания сводной таблицы, но я хочу добавить столбец со значением, которое соответствует условию из исходной таблицы. Условие, которое я хочу проверить, заключается в том, что style = 2, чтобы в результатах отображался новый столбец с именем файла, соответствующим этому стилю.
Вот как выглядит исходная таблица:
category | value | style | filename
A | 8 | 0 | AAA
B | 4 | 2 | BBB
B | 6 | 1 | CCC
A | 3 | 2 | DDD
A | 6 | 1 | EEE
C | 7 | 2 | FFF
B | 5 | 1 | GGG
A | 3 | 1 | HHH
Это то, что я хочу:
category | total_value | filename
A | 20 | DDD
B | 15 | BBB
C | 7 | FFF
Я пробовал этот запрос, но выбранное имя файла было МИНИМАЛЬНЫМ, а не тем, которое соответствует style = 2:
SELECT category, SUM(value) AS total_value, MIN(filename) AS filename FROM data GROUP BY category;
2 ответа
Если я правильно понимаю, вам нужно это:
SELECT category, SUM(value) AS total_value,
MIN(case when style = 2 then filename end) AS filename
FROM data GROUP BY category;
Хотя мне больше нравится ответ @Oto Shavadze, я все же хотел бы поделиться решением, о котором подумал:
select data.category, SUM(data.value), hlp.filename
from data
left join (
select category, filename
from data
where style = 2
group by category
limit 1
) as hlp
on data.category = hlp.category
group by data.category
Это решение использует подзапрос, который выберет соответствующий filename
для каждого category
.
< Сильный > EDIT :
Похоже, что веб-сайт, который я использовал, не был слишком строгим, поскольку использование colum не занесено в группу и не является агрегатной функцией.
Итак, вот обновленная версия, использующая функцию MIN () для имени файла, как я сказал в комментариях:
select data.category, SUM(data.value), MIN(hlp.filename)
from data
left join (
select category, MIN(filename) as filename
from data
where style = 2
group by category
) as hlp
on data.category = hlp.category
group by data.category;
Похожие вопросы
Новые вопросы
mysql
MySQL - это бесплатная система управления реляционными базами данных с открытым исходным кодом (RDBMS), использующая язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. Д. Это разные БД, которые все используют свои собственные диалекты SQL для управления данными.