Поиск…


замечания

Создание сводных запросов в MySQL зависит от функции GROUP_CONCAT() . Если ожидается, что результат выражения, который создает столбцы сводного запроса, будет большим, значение переменной group_concat_max_len должно быть увеличено:

set session group_concat_max_len = 1024 * 1024; -- This should be enough for most cases

Создание сводного запроса

MySQL не обеспечивает встроенный способ создания сводных запросов. Однако они могут быть созданы с использованием подготовленных операторов.

Предположим, что таблица tbl_values :

Я бы название группа Значение
1 Пит 10
2 Пит В 20
3 Джон 10

Запрос: создать запрос, который показывает сумму Value для каждого Name ; Group должна быть заголовком столбца, а Name должно быть заголовком строки.

-- 1. Create an expression that builds the columns
set @sql = (
    select group_concat(distinct 
        concat(
            "sum(case when `Group`='", Group, "' then `Value` end) as `", `Group`, "`"
        )
    ) 
    from tbl_values
);

-- 2. Complete the SQL instruction
set @sql = concat("select Name, ", @sql, " from tbl_values group by `Name`");

-- 3. Create a prepared statement
prepare stmt from @sql;

-- 4. Execute the prepared statement
execute stmt;

Результат:

название В
Джон 10 НОЛЬ
Пит 10 20

Важно: освободите подготовленное заявление, если оно больше не требуется:

deallocate prepare stmt;

Пример скрипта SQL



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow