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

Použití @DECLARE v MYSQL 5.1

MySQL nemá pivot takže budete muset transponovat data z řádků do sloupců pomocí agregační funkce s CASE výraz:

select 
  sum(case when tt.type = 'UnitTest' then 1 else 0 end) UnitTest,
  sum(case when tt.type = 'WebTest' then 1 else 0 end) WebTest
from test t
inner join test_type tt
  on t.test_type = tt.id

Viz SQL Fiddle s ukázkou .

Pokud budete mít neznámý počet types které chcete převést na sloupce, můžete použít připravený příkaz ke generování dynamického SQL:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'sum(CASE WHEN tt.type = ''',
      type,
      ''' THEN 1 else 0 END) AS `',
      type, '`'
    )
  ) INTO @sql
FROM test_type;

SET @sql 
  = CONCAT('SELECT ', @sql, ' 
            from test t
            inner join test_type tt
              on t.test_type = tt.id');

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

Viz SQL Fiddle s ukázkou




  1. mysqlimport pomocí výpisu

  2. Jak zjistit, že transakce již byla zahájena?

  3. MySQL - Jak udělat Oracle RANK() OVER (ORDER BY skóre DESC)

  4. Denní zálohování databáze pomocí Cron Job