sql >> データベース >  >> RDS >> Mysql

MYSQL5.1での@DECLAREの使用

    MySQLにはピボットがありません 関数なので、CASEの集計関数を使用して、データを行から列に転置する必要があります。 式:

    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
    

    SQL Fiddle withDemo を参照してください。 。

    不明な数のtypesがある場合 列に変換する場合は、プリペアドステートメントを使用して動的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;
    

    SQL Fiddle withDemo を参照してください。




    1. PostgreSQLのパフォーマンスの監視と監査-トップリソース

    2. MySQLで複数の列を検索する方法は?

    3. SQLの条件の実行順序'where'句

    4. 入札ウェブサイトのカウントダウンタイマーの作り方