PIVOTコマンドはありません(MySQL ピボットテーブル(行を列に変換) )MySQLでは、クエリのサイズは静的になります。そのため、申請ではこれを延期する方がよいでしょう。
サイズ列のドメインが有限で小さい場合は、以下に投稿した次のクエリを使用できます。
mysql> SELECT
-> c.color as color,
-> SUM(IF(s.size = 32, o.amount, 0)) as '32',
-> SUM(IF(s.size = 34, o.amount, 0)) as '34',
-> SUM(IF(s.size = 36, o.amount, 0)) as '36',
-> SUM(IF(s.size = 38, o.amount, 0)) as '38'
-> FROM `colors` c
-> INNER JOIN `order` o
-> INNER JOIN `sizes` s
-> WHERE c.`id` = o.`color` and s.`id` = o.`size`
-> GROUP BY color
-> ;
+-------+------+------+------+------+
| color | 32 | 34 | 36 | 38 |
+-------+------+------+------+------+
| blue | 3 | 4 | 2 | 0 |
| red | 1 | 0 | 0 | 0 |
+-------+------+------+------+------+
2 rows in set (0.04 sec)
IF条件でわかるように、私はサイズの値を使用します。これは、質問が静的であることを意味します。可能なすべてのサイズは32、34、36、38のいずれかであると想定しています。
作業デモ@
編集:最初から言っているように、サイズの値が不明であるか、ドメインが大きい場合は、サーバースクリプト(PHPなど)内でピボット作業を延期することをお勧めします。それでも、次のクエリを使用してスクリプトで処理できます:
SELECT
c.color as color,
s.size,
o.amount --Edit: added
FROM `colors` c
INNER JOIN `order` o
INNER JOIN `sizes` s
WHERE c.`id` = o.`color` and s.`id` = o.`size`
どのように機能するかをご覧ください@