Что имеется?
Имеется таблица такого вида
+----+--------------+-------+--------------+
| 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
Комментариев нет:
Отправить комментарий