Большое вам спасибо! Работает. Не могли бы вы, пожалуйста пояснить зачем там SUM()?
IF я так полагаю, что если значение в столбце не совпало, мы ставим 0.
Кстати, а что делать если количество price заранее не известно? Или там вообще могут быть любые значение?
1) SUM там так как фактически мы сворачиваем разреженную таблицу, уберите GROUP_BY тогда будет понятнее, что именно происходит и для чего нужен sum
2) Тогда вам придется сначала получить все уникальные price_id и затем сгенерировать на каждый из них отдельный SUM(IF ....)
select tovar_id,
group_concat(price_id order by price_id asс separator ',') as price_ids,
group_concat(price order by price_id asс separator ',') as prices
from prices group by tovar_id
А вроде бы group_concat() работает только со строками? Я тоже сначала пробовал сам с этим, что то делать, что числовые значения становились не воспринимаемыми.