#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 не предназначен для этого, результат никогда не может иметь разное количество столбцов для каждой строки.
Я думаю, что лучший способ добиться этого — изменить дизайн вашего результирующего набора с помощью конкатенации информации по примеру. Или иметь фиксированное количество столбцов, заполненных нулевыми или пустыми значениями.
С другой стороны, вы можете сделать это программно, если ваш язык допускает динамическое количество столбцов для каждой строки.