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

mysqlで動的列を選択します

    残念ながら、MySQLにはPIVOTがありません 基本的にあなたがやろうとしていることである機能。したがって、CASEで集計関数を使用する必要があります ステートメント:

    SELECT type,
      sum(case when criteria_id = 'env' then result end) env,
      sum(case when criteria_id = 'gas' then result end) gas,
      sum(case when criteria_id = 'age' then result end) age
    FROM results
    group by type
    

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

    これを動的に実行する場合、つまり、転置する列が事前にわからない場合は、次の記事を確認する必要があります。

    動的ピボットテーブル(行を列に変換)

    コードは次のようになります:

    SET @sql = NULL;
    SELECT
      GROUP_CONCAT(DISTINCT
        CONCAT(
          'SUM(IF(CRITERIA_ID = ''',
          CRITERIA_ID,
          ''', RESULT, NULL)) AS ',
          CRITERIA_ID
        )
      ) INTO @sql
    FROM
      Results;
    SET @sql = CONCAT('SELECT type, ', @sql, ' FROM Results GROUP BY type');
    
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    

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




    1. 連続訪問数をカウントする

    2. AndroidRoom-アプリの実行ごとに自動生成されたテーブルの主キーをリセットする方法

    3. 一貫性のないMySQLスレーブを再構築する方法は?

    4. MySQLで正規表現を使用する方法は?