Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Używanie @DECLARE w MYSQL 5.1

MySQL nie ma pivota funkcji, więc będziesz musiał transponować dane z wierszy do kolumn za pomocą funkcji agregującej z CASE wyrażenie:

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

Zobacz SQL Fiddle z wersją demonstracyjną .

Jeśli będziesz mieć nieznaną liczbę types które chcesz przekonwertować na kolumny, możesz użyć przygotowanej instrukcji do wygenerowania dynamicznego 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;

Zobacz SQL Fiddle z wersją demonstracyjną




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ukończony projekt Java, teraz tworzenie pliku jar lub .exe (z bazą danych)

  2. Policz i grupuj niepuste wartości w MySQL

  3. łączenie połączeń php mysql

  4. ile max dołączyć do tabeli w mysql? i jak to policzyć?

  5. Eksportowanie obiektu Blob z bazy danych MySQL do pliku tylko z SQL