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

GROUPBYを使用したmysqlピボットクエリの結果

    PIVOT ingは簡単ではありません(また、いいことでもありません)。 CASEを使用することを好みます :

    SELECT d.data_timestamp
         , SUM( CASE WHEN data_id =  1 THEN data_value ELSE 0 END ) AS 'input_1'
         , SUM( CASE WHEN data_id =  2 THEN data_value ELSE 0 END ) AS 'input_2'
         ...
         , SUM( CASE WHEN data_id = 20 THEN data_value ELSE 0 END ) AS 'input_20'
    FROM data 
    GROUP BY data_timestamp
    ORDER BY data_timestamp ASC
    

    ただし、IF MySQLでも動作します:

    SELECT d.data_timestamp
         , SUM( IF(data_id =  1, data_value, 0) ) AS 'input_1'
         , SUM( IF(data_id =  2, data_value, 0) ) AS 'input_2'
         ...
         , SUM( IF(data_id = 20, data_value, 0) ) AS 'input_20'
    FROM data 
    GROUP BY data_timestamp
    ORDER BY data_timestamp ASC
    

    または、20レベルのJOINを使用することもできます :

    SELECT d.data_timestamp
         , d01.data_value AS 'input_1'
         , d02.data_value AS 'input_2'
         ...
         , d20.data_value AS 'input_20'
    FROM
      ( SELECT DISTINCT d.data_timestamp
        FROM data
      ) AS d 
      LEFT JOIN data AS d01
        ON d01.data_timestamp = d.data_timestamp
        AND d01.data_id =  1
      LEFT JOIN data AS d02
        ON d02.data_timestamp = d.data_timestamp
        AND d02.data_id =  2
      ...                                   --- 20 JOINs
      LEFT JOIN data AS d20
        ON d20.data_timestamp = d.data_timestamp
        AND d20.data_id = 20
    ORDER BY d.data_timestamp ASC
    


    1. レベル15,000にこぼれるソート

    2. 挿入コマンドを実行し、挿入されたIDをSQLに返します

    3. R12.2について知っておくべき40の質問

    4. 断続的なODBC接続の失敗