MySQL
Сводные запросы
Поиск…
замечания
Создание сводных запросов в 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;
Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow