Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Два RIGHT JOIN с группировкой и SUM / 6 сообщений из 6, страница 1 из 1
06.12.2014, 13:34:05
    #38826951
trawen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два RIGHT JOIN с группировкой и SUM
Добрый день.

Хочу подсчитать TOP 10 продаваемых товаров.
Есть 3 таблички:

proshop_orders - список заказов и статус заказа
proshop_orders_products - список товаров в заказах с кол-вом и префиксом
proshop_products - просто описание продуктов

1. Нужно сначала выбрать продукты заказов proshop_orders_products по префиксу product_sku
2. сравнить их по order_id с с заказом, что бы проверить что у заказа status_id = 4
3. подсчитать количество продаж каждого товара product_qty
4. потом нужно уже выбрать описание продукта из proshop_products по product_id из proshop_orders_products
5. группировать по proshop_products, что бы не было повторяющихся продуктов

в итоге получаем список продуктов с кол-вом продаж отсортировано по нему же.

уфф, мозголомный запрос получается, возможно ли его вообще реализовать?

Код: sql
1.
2.
3.
4.
5.
6.
SELECT * 
FROM proshop_orders po 
RIGHT JOIN proshop_orders_products pop ON pop.order_id=po.id 
RIGHT JOIN proshop_products pp ON pp.id=pop.product_id 
WHERE LEFT(pop.product_sku,3)='$prefix' AND po.status_id=4 
ORDER BY pop.product_qty



Застрял на том, что нужно как то сделать SUM product_qty и потом сгруппировать всё это.

Подскажите пожалуйста. Обычно решаю это на php, но тут проснулась любознательность, хочется наконец подружиться с SQL на нормально уровне.
...
Рейтинг: 0 / 0
06.12.2014, 13:42:49
    #38826954
JeStone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два RIGHT JOIN с группировкой и SUM
trawen,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT v.product_name
FROM (
SELECT pp.product_name, SUM(pop.product_qty) AS pop_sum 
FROM proshop_orders po 
INNER JOIN proshop_orders_products pop ON pop.order_id=po.id 
INNER JOIN proshop_products pp ON pp.id=pop.product_id 
WHERE LEFT(pop.product_sku,3)='$prefix' AND po.status_id=4
GROUP BY pp.id) v
ORDER BY v.pop_sum DESC
LIMIT 10


Не оно? product_name - название поля, где хранится название товара в таблице proshop_products
...
Рейтинг: 0 / 0
06.12.2014, 14:46:05
    #38826967
trawen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два RIGHT JOIN с группировкой и SUM
JeStone, спасибо, работает!!

Только один вопросик, я сделал еще TOP10 по кол-ву дохода.
Там цена умножается на количество в SUM, вот так SUM(pop.product_qty*pop.product_price).
Но есть товары проданные за 0 рублей. А MySql как ни в чем при 1*0 выдает 1! Вместо нуля.
...
Рейтинг: 0 / 0
06.12.2014, 14:58:01
    #38826971
JeStone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два RIGHT JOIN с группировкой и SUM
trawen,
Покажите исходные данные из всех трех таблиц.
ТОР 10 по доходности вы считаете как-то так?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT v.product_name, v.pop_sum
FROM (
SELECT pp.product_name, SUM(pop.product_qty*pop.product_price) AS pop_sum 
FROM proshop_orders po 
INNER JOIN proshop_orders_products pop ON pop.order_id=po.id 
INNER JOIN proshop_products pp ON pp.id=pop.product_id 
WHERE LEFT(pop.product_sku,3)='$prefix' AND po.status_id=4
GROUP BY pp.id) v
ORDER BY v.pop_sum DESC
LIMIT 10
...
Рейтинг: 0 / 0
06.12.2014, 15:00:14
    #38826972
trawen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два RIGHT JOIN с группировкой и SUM
JeStone, отбой.

Забыл что там есть товары со свободной цено и суммировались товары у которых и 0 и 1 может быть.
Так что всё верно работает.
...
Рейтинг: 0 / 0
07.12.2014, 06:35:56
    #38827223
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два RIGHT JOIN с группировкой и SUM
trawenДобрый день.

Хочу подсчитать TOP 10 продаваемых товаров.
Есть 3 таблички:

proshop_orders - список заказов и статус заказа
proshop_orders_products - список товаров в заказах с кол-вом и префиксом
proshop_products - просто описание продуктов

1. Нужно сначала выбрать продукты заказов proshop_orders_products по префиксу product_sku
2. сравнить их по order_id с с заказом, что бы проверить что у заказа status_id = 4
3. подсчитать количество продаж каждого товара product_qty
4. потом нужно уже выбрать описание продукта из proshop_products по product_id из proshop_orders_products
5. группировать по proshop_products, что бы не было повторяющихся продуктов

в итоге получаем список продуктов с кол-вом продаж отсортировано по нему же.

уфф, мозголомный запрос получается, возможно ли его вообще реализовать?

Код: sql
1.
2.
3.
4.
5.
6.
SELECT * 
FROM proshop_orders po 
RIGHT JOIN proshop_orders_products pop ON pop.order_id=po.id 
RIGHT JOIN proshop_products pp ON pp.id=pop.product_id 
WHERE LEFT(pop.product_sku,3)='$prefix' AND po.status_id=4 
ORDER BY pop.product_qty



Застрял на том, что нужно как то сделать SUM product_qty и потом сгруппировать всё это.

Подскажите пожалуйста. Обычно решаю это на php, но тут проснулась любознательность, хочется наконец подружиться с SQL на нормально уровне.


с какого перепоя ты решил, что join тут должен быть внешним (right outer в частности)? он тут должен быть внутренним, т.е.просто join.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Два RIGHT JOIN с группировкой и SUM / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]