Страницы

Поиск по вопросам

суббота, 1 июня 2019 г.

Как перевести вертикальную таблицу в горизонтальную?

Что имеется? Имеется таблица такого вида
+----+--------------+-------+--------------+ | id | product_name | count | warehouse_id | +----+--------------+-------+--------------+ | 1 | Puperproduct | 10 | 1 | | 2 | Puperproduct | 15 | 2 | | 3 | Puperproduct | 12 | 3 | +----+--------------+-------+--------------+
Что нужно получить? Нужно получить макс и мин количество товаров с ихними складами.
+-----+---------------+-----------+------------------+-----------+------------------+ | id | product_name | min_count | min_warehouse_id | max_count | max_warehouse_id | +-----+---------------+-----------+------------------+-----------+------------------+ | 1 | Puperproduct | 10 | 1 | 15 | 2 | +-----+---------------+-----------+------------------+-----------+------------------+
Что у меня получилось? Получилось:
select id , product_name , min(count) as min_count , max(count) as max_count from table group by product_name
+----+--------------+-----------+-----------+ | id | product_name | min_count | max_count | +----+--------------+-----------+-----------+ | 1 | Puperproduct | 10 | 15 | +----+--------------+-----------+-----------+
Как взять ид складов? Количество записей около 800К. Mysql 5.5


Ответ

Собираем в одну строку count дополненный, скажем, до 10 символов и соответствующий ему warehouse_id, берем от этой строки min/max и потом из этого вырезаем склад обратно и преобразуем в числовой вид:
select id, product_name, max(count) as max_count, min(count) as min_count, substr(min(concat(lpad(count,10,'0'),warehouse_id)),11)+0 min_warehouse_id, substr(max(concat(lpad(count,10,'0'),warehouse_id)),11)+0 max_warehouse_id from table group by product_name

Комментариев нет:

Отправить комментарий