2

私は約6か月間SQLを学び、実践してきました。私は投げ込む準備ができており、私はそれについて愚かであり、私の脳はそのパターンのほとんどを包み込むことができないことを認めます. ピボットテーブルを作成しようとしています。この件に関する単純な文献はあまりなく、キューブと基本的なエンティティ属性値 (EAV) ロジックの作成について話している 1 つの情報源が見つかりました。

name        action  pagecount
-------------------------------
Company A   PRINT    3
Company A   PRINT    2
Company A   PRINT    3
Company B   EMAIL    6
Company B   PRINT    2
Company B   PRINT    2
Company B   PRINT    1
Company A   PRINT    3

name列の合計数と列の合計数を使用して、action列をクロス集計したい(それは正しい用語ですか?)pagecount

 name        action_PRINT   action_EMAIL       pagecount_PRINT      pagecount_EMAIL
--------------------------------------------------------------------------------
Company A   4                0                 11                       0
Company B   3                1                 5                        6
4

1 に答える 1

2

このタイプの操作は として知られていますが、MySQL にはピボット関数がないため、集計関数とステートメントPIVOTの両方を使用して複製する必要があります。CASE

以下を使用して結果を生成できます。

select name,
  sum(case when action = 'PRINT' then 1 else 0 end) action_print,
  sum(case when action = 'EMAIL' then 1 else 0 end) action_email,
  sum(case when action = 'PRINT' then pagecount else 0 end) pagecount_print,
  sum(case when action = 'EMAIL' then pagecount else 0 end) pagecount_email
from yourtable
group by name

デモで SQL Fiddle を参照してください

結果は次のようになります。

|      NAME | ACTION_PRINT | ACTION_EMAIL | PAGECOUNT_PRINT | PAGECOUNT_EMAIL |
-------------------------------------------------------------------------------
| Company A |            4 |            0 |              11 |               0 |
| Company B |            3 |            1 |               5 |               6 |
于 2012-12-04T10:23:32.837 に答える