MySQL
Vragen draaien
Zoeken…
Opmerkingen
Het maken van GROUP_CONCAT()
in MySQL is afhankelijk van de functie GROUP_CONCAT()
. Als verwacht wordt dat het resultaat van de uitdrukking die de kolommen van de group_concat_max_len
, groot is, moet de waarde van de variabele group_concat_max_len
worden verhoogd:
set session group_concat_max_len = 1024 * 1024; -- This should be enough for most cases
Een pivotquery maken
MySQL biedt geen ingebouwde manier om spilquery's te maken. Deze kunnen echter worden gemaakt met behulp van voorbereide verklaringen.
Stel dat de tabel tbl_values
:
ID kaart | Naam | Groep | Waarde |
---|---|---|---|
1 | Pete | EEN | 10 |
2 | Pete | B | 20 |
3 | John | EEN | 10 |
Verzoek: maak een query die de som van de Value
voor elke Name
toont; de Group
moet de kolomkop zijn en de Name
moet de rijkop zijn.
-- 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;
Resultaat:
Naam | EEN | B |
---|---|---|
John | 10 | NUL |
Pete | 10 | 20 |
Belangrijk: Wijs de voorbereide verklaring toe als deze niet langer nodig is:
deallocate prepare stmt;
Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow