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

mysqlのピボットテーブル

    まさにそれを実行するシェルスクリプトをいつでも作成できます:-)

    #!/bin/sh
    
    mysql -BN test > /tmp/$$_tagnames.tmp <<SQL
    select distinct tagname from test; 
    SQL
    
    cat > /tmp/$$_create_table.sql <<EOF
    drop table if exists pivot;
    create table pivot select 
    EOF
    
    while read tag; do
        echo "max(if(tagname = '$tag', value, null)) AS '$tag'," >> /tmp/$$_create_table.sql
    done < /tmp/$$_tagnames.tmp
    
    cat >> /tmp/$$_create_table.sql <<EOF
    time
    FROM test 
    GROUP BY time;
    select * from pivot;
    EOF
    
    mysql -Bt test < /tmp/$$_create_table.sql
    
    rm /tmp/$$_create_table.sql
    rm /tmp/$$_tagnames.tmp
    

    データ:

    mysql> select * from test;
    +---------+-------+---------------------+
    | tagname | value | time                |
    +---------+-------+---------------------+
    | a       | foo   | 2012-12-21 00:00:01 |
    | b       | foo   | 2012-04-27 00:00:01 |
    | c       | bar   | 2012-03-27 00:00:01 |
    | d       | bar   | 2012-12-21 00:00:01 |
    +---------+-------+---------------------+
    4 rows in set (0.00 sec)
    

    スクリプト出力:

    $ ./pivot.sh 
    +------+------+------+------+---------------------+
    | a    | b    | c    | d    | time                |
    +------+------+------+------+---------------------+
    | NULL | NULL | bar  | NULL | 2012-03-27 00:00:01 |
    | NULL | foo  | NULL | NULL | 2012-04-27 00:00:01 |
    | foo  | NULL | NULL | bar  | 2012-12-21 00:00:01 |
    +------+------+------+------+---------------------+
    



    1. 大きなCSVをmysqlデータベースにインポートする

    2. PostgreSQLのSELECTクエリで列を結合する

    3. MYSQL NOW()のタイムゾーンを設定します

    4. oci8、php7およびOracle10.1の互換性