Группировать и суммировать с динамическими именами столбцов

#mysql #sql #pivot #aggregate-functions

#mysql #sql #сводная #агрегатные функции

Вопрос:

Мне нужно СГРУППИРОВАТЬ таблицу по годам и СУММИРОВАТЬ все возможные типы (неизвестные) с динамическими именами столбцов.

Пример таблицы:

 Type|Year
a    2001
a    2001
c    2002
b    2002
c    2003
a    2003
z    2003
  

Пример результата:

 Year: 2001, Type_a: 2
Year: 2002, Type_c: 1, Type_b: 1
Year: 2003, Type_c: 1, Type_a: 1, Type_z: 1
  

Комментарии:

1. Я пробовал базовые операторы IF, но мне нужно иметь возможность обрабатывать «неизвестное» количество типов / столбцов. т.е.: «ВЫБЕРИТЕ год, СУММА (ЕСЛИ (Тип == ‘a’, 1, 0)) КАК Type_a ИЗ ГРУППЫ таблиц ПО годам» этого не сделает. Я видел несколько сводных примеров, но все они имеют дело с «известным» количеством переменных типов / столбцов

Ответ №1:

Вы могли бы группировать и суммировать типы, используя запрос, подобный этому —

 SELECT year, type, COUNT(type) FROM table_name GROUP BY year, type;
  

Это дает другой набор результатов, но с нужными вам данными.

Комментарии:

1. В итоге я последовал этому подходу.

Ответ №2:

 SELECT year,COUNT(type) from tableName GROUP BY(type)
  

попробуйте это

Комментарии:

1. Это не динамические имена столбцов (иначе: сводные).

Ответ №3:

SOL не предназначен для этого, результат никогда не может иметь разное количество столбцов для каждой строки.

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

С другой стороны, вы можете сделать это программно, если ваш язык допускает динамическое количество столбцов для каждой строки.