MySQL
Zapytania przestawne
Szukaj…
Uwagi
Tworzenie zapytań przestawnych w MySQL opiera się na funkcji GROUP_CONCAT()
. Jeśli oczekuje się, że wynik wyrażenia tworzącego kolumny zapytania przestawnego będzie duży, wartość zmiennej group_concat_max_len
musi zostać zwiększona:
set session group_concat_max_len = 1024 * 1024; -- This should be enough for most cases
Tworzenie zapytania przestawnego
MySQL nie zapewnia wbudowanego sposobu tworzenia zapytań przestawnych. Można je jednak utworzyć za pomocą przygotowanych instrukcji.
Załóżmy, że tabela tbl_values
:
ID | Nazwa | Grupa | Wartość |
---|---|---|---|
1 | Pete | ZA | 10 |
2) | Pete | b | 20 |
3) | Jan | ZA | 10 |
Żądanie: Utwórz zapytanie, które pokazuje sumę Value
dla każdej Name
; Group
musi być nagłówkiem kolumny, a Name
musi być nagłówkiem wiersza.
-- 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;
Wynik:
Nazwa | ZA | b |
---|---|---|
Jan | 10 | ZERO |
Pete | 10 | 20 |
Ważne: cofnij przydział przygotowanego wyciągu, gdy nie będzie już potrzebny:
deallocate prepare stmt;
Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow