Non esiste alcun comando PIVOT (MySQL tabelle pivot (trasforma le righe in colonne) ) in MySQL, quindi la tua query sarà statica per dimensione. Ecco perché è meglio rimandare questo in applicazione.
Ho pensato che se hai solo un dominio limitato e piccolo per la colonna delle dimensioni, puoi utilizzare la seguente query che ho pubblicato di seguito:
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)
Come puoi vedere in condizioni IF, utilizzo il valore della dimensione che è ciò che voglio dire che la domanda è statica. Presumo che tutte le dimensioni possibili possano essere 32, 34, 36, 38.
Demo funzionante @SQL Fiddle
Modifica:come sto dicendo dall'inizio, se i valori delle dimensioni sono sconosciuti o il dominio è grande, è meglio che tu abbia posticipato il lavoro pivot all'interno dello script del tuo server (ad es. PHP), puoi comunque utilizzare la seguente query per elaborare nello script:
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`
Guarda come funziona @Fiddle SQL .