sql >> Databáze >  >> RDS >> Mysql

Dynamický pivot MySQL

SELECT id,SUM(CASE WHEN Item='Chocolate' THEN Purchased END) as Chocolate_Purchased,
SUM(CASE WHEN Item='Biscuit' THEN Purchased END) as Biscuit_Purchased,
SUM(CASE WHEN Item='Jelly' THEN Purchased END) Jelly_Purchased,
SUM(CASE WHEN Item='Mile' THEN Purchased END) as Mile_Purchased 
GROUP BY id

Zde je dynamická verze

SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
    CONCAT(
      'SUM(IF(t.item = ''',
      item,
      ''', t.purchased, 0)) AS ',
      item
    )
   )INTO @sql
FROM t;

SET @sql = CONCAT('SELECT id,
                     ', @sql, ' 
                   FROM t               
                   GROUP BY id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

FIDDLE




  1. JSON_SET() vs JSON_INSERT() vs JSON_REPLACE() v MySQL:Jaký je rozdíl?

  2. Použití časových pásem ve webové aplikaci PHP

  3. Interval porovnávání PostgreSQL mezi časem začátku a konce s časovým razítkem

  4. Sledování latence čtení/zápisu