mysql キーバリューなテーブルを1レコードで取得したい

複数のレコードを1レコードにしたい・・・

作成日:2021-09-25, 更新日:2021-09-25

やりたいこと

▼こんなテーブルがあって・・・

key value
f_name シマウマ
p_name 太郎
age 7
sex

▼こんなレコードにしたい

f_name p_name age sex
シマウマ 太郎 7

SQL

▼CASE文をMAXで囲んであげる

SELECT
  MAX(CASE WHEN `key`='f_name' THEN `value` ELSE '-empty-' END) AS f_name,
  MAX(CASE WHEN `key`='p_name' THEN `value` ELSE '-empty-' END) AS p_name,
  MAX(CASE WHEN `key`='age' THEN `value` ELSE '-empty-' END) AS age,
  MAX(CASE WHEN `key`='sex' THEN `value` ELSE '-empty-' END) AS sex
FROM `〇〇〇`;

グループ化

▼ユーザーごとにキーバリューがある

user_id key value
1 f_name シマウマ
1 p_name 太郎
2 f_name シマウマ
2 p_name 花子
1 age 7
SELECT
  MAX(CASE WHEN `key`='f_name' THEN `value` ELSE '-empty-' END) AS f_name,
  MAX(CASE WHEN `key`='p_name' THEN `value` ELSE '-empty-' END) AS p_name,
  MAX(CASE WHEN `key`='age' THEN `value` ELSE '-empty-' END) AS age,
  MAX(CASE WHEN `key`='sex' THEN `value` ELSE '-empty-' END) AS sex
FROM `〇〇〇`
GROUP BY `user_id`;