Как добавить дополнительный столбец к результатам GROUP BY со значением, соответствующим условию? - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь использовать 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 ]

2 голосов
/ 29 мая 2019

Если я правильно понимаю, вам нужно это:

SELECT category, SUM(value) AS total_value, 
MIN(case when style = 2 then filename end) AS filename 
FROM data GROUP BY category;
0 голосов
/ 29 мая 2019

Хотя мне больше нравится ответ @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.

РЕДАКТИРОВАТЬ:

Похоже, что веб-сайт, который я использовал, не был очень ограничительным, при использовании 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...