MySQL
ピボットクエリ
サーチ…
備考
MySQLのピボットクエリの作成は、 GROUP_CONCAT()
関数に依存しています。ピボットクエリの列を作成する式の結果が大きいと予想される場合は、 group_concat_max_len
変数の値をgroup_concat_max_len
する必要があります。
set session group_concat_max_len = 1024 * 1024; -- This should be enough for most cases
ピボットクエリの作成
MySQLは、ピボットクエリを作成するための組み込みの方法を提供していません。ただし、これらはプリペアドステートメントを使用して作成できます。
テーブルtbl_values
仮定します。
イド | 名 | グループ | 値 |
---|---|---|---|
1 | ピート | A | 10 |
2 | ピート | B | 20 |
3 | ジョン | A | 10 |
リクエスト:各Name
のValue
の合計を示すクエリを作成します。 Group
は列ヘッダーでなければならず、 Name
は行ヘッダーでなければなりません。
-- 1. Create an expression that builds the columns
set @sql = (
select group_concat(distinct
concat(
"sum(case when `Group`='", Group, "' then `Value` end) as `", `Group`, "`"
)
)
from tbl_values
);
-- 2. Complete the SQL instruction
set @sql = concat("select Name, ", @sql, " from tbl_values group by `Name`");
-- 3. Create a prepared statement
prepare stmt from @sql;
-- 4. Execute the prepared statement
execute stmt;
結果:
名 | A | B |
---|---|---|
ジョン | 10 | ヌル |
ピート | 10 | 20 |
重要:不要になった準備済みのステートメントの割り当てを解除する:
deallocate prepare stmt;
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow