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

MySQLピボットテーブルヘッドスクラッチャー

    すでに述べたように、MySQLはそれ自体でピボットするように構築されていないため、可能であればコードでピボットする必要がありますが、それを除けば、以下は必要なことを実行するSQLの例です。実際のテーブルが何らかの意味で可変であると仮定すると(たとえば、q [x]列の数や、super_idの数など)、これをストアドプロシージャにまとめて、必要なSQLを動的に生成して実行できます。

    >

    testTableという名前の初期テーブルを想定します:

    mysql> select * from testTable;
    +----------+--------+------+------+
    | super_id | cat_id | qa   | qb   |
    +----------+--------+------+------+
    |        1 |      1 |    5 |    5 | 
    |        1 |      2 |    2 |    5 | 
    |        1 |      3 |    3 |    4 | 
    |        2 |      4 |    5 |    3 | 
    |        2 |      5 |    3 |    4 | 
    |        2 |      6 |    4 |    2 | 
    +----------+--------+------+------+
    6 rows in set (0.00 sec)
    

    次のSQLを使用します:

    SELECT
        'qa' q,
        SUM( CASE WHEN super_id = 1 THEN qa ELSE 0 END )/SUM( CASE WHEN super_id = 1 THEN 1 ELSE 0 END ) super_id_1,
        SUM( CASE WHEN super_id = 2 THEN qa ELSE 0 END )/SUM( CASE WHEN super_id = 2 THEN 1 ELSE 0 END ) super_id_2
    FROM
        testTable
    UNION ALL
    SELECT
        'qb' q,
        SUM( CASE WHEN super_id = 1 THEN qb ELSE 0 END )/SUM( CASE WHEN super_id = 1 THEN 1 ELSE 0 END ) super_id_1,
        SUM( CASE WHEN super_id = 2 THEN qb ELSE 0 END )/SUM( CASE WHEN super_id = 2 THEN 1 ELSE 0 END ) super_id_2
    FROM
        testTable
    ;
    

    この結果を達成するには:

    +----+------------+------------+
    | q  | super_id_1 | super_id_2 |
    +----+------------+------------+
    | qa |     3.3333 |     4.0000 | 
    | qb |     4.6667 |     3.0000 | 
    +----+------------+------------+
    2 rows in set (0.00 sec)
    

    (編集:フォーマット)




    1. 2つの別々のMySQLクエリの結果を組み合わせる

    2. SQLServer2019でのスカラーUDFインライン化

    3. mysql_fetch_array()は、パラメーター1がリソースの問題であると想定しています

    4. AndroidとMSSQLSERVER2008の接続