mysqlでの行から列への変換方法にはどんなものがありますか?
MySQLの行から列への変換方法には次のようなものがあります:
- CASE文を使用すると、条件に基づいて行データを列データに変換することができます。
SELECT
id,
MAX(CASE WHEN attribute = 'attribute1' THEN value END) AS attribute1,
MAX(CASE WHEN attribute = 'attribute2' THEN value END) AS attribute2,
MAX(CASE WHEN attribute = 'attribute3' THEN value END) AS attribute3
FROM
table
GROUP BY
id;
- PIVOT関数の使用:MySQLには組み込みのPIVOT関数がありませんが、サブクエリと集計関数を使用して模倣することができます。
SELECT
id,
MAX(CASE WHEN attribute = 'attribute1' THEN value END) AS attribute1,
MAX(CASE WHEN attribute = 'attribute2' THEN value END) AS attribute2,
MAX(CASE WHEN attribute = 'attribute3' THEN value END) AS attribute3
FROM
(SELECT id, attribute, value FROM table) AS t
GROUP BY
id;
- GROUP_CONCAT関数を使用すると、複数の行データを1つの文字列に結合し、その後サブクエリを使用して文字列を複数の列に分割することができます。
SELECT
id,
SUBSTRING_INDEX(GROUP_CONCAT(CASE WHEN attribute = 'attribute1' THEN value END), ',', 1) AS attribute1,
SUBSTRING_INDEX(GROUP_CONCAT(CASE WHEN attribute = 'attribute2' THEN value END), ',', 1) AS attribute2,
SUBSTRING_INDEX(GROUP_CONCAT(CASE WHEN attribute = 'attribute3' THEN value END), ',', 1) AS attribute3
FROM
table
GROUP BY
id;
これらは一般的なMySQLの行列変換の実装方法のいくつかです。実際のニーズに応じて適切な方法を選択できます。