#mysql #sql
#mysql #sql
Вопрос:
У меня есть запрос mysql, который пытается объединить следующие таблицы:
TABLE: orders_products
products_id
orders_id
products_quantity
products_price
TABLE: products
products_id
products_model
Мне нужен запрос, который возвращает общее количество продаж, общее значение продаж для каждого product_id и product_model для каждого продукта в таблице orders_products. Это лучшее, что я придумал на данный момент, и это просто добавляет все в одно ведро:
SELECT
SUM( op.products_quantity ) AS num_sold
,SUM( op.final_price * op.products_quantity )
,p.products_model
FROM orders_products AS op
JOIN products AS p
WHERE p.products_id = op.products_id
Ответ №1:
Добавьте group by p.products_id
после вашего where
, и все будет хорошо
Ответ №2:
SELECT p.products_id, p.products_model,
SUM( op.products_quantity ) AS num_sold
,SUM( op.final_price * op.products_quantity ) AS sales
FROM orders_products AS op
JOIN products AS p
WHERE p.products_id = op.products_id
GROUP BY p.products_id, p.products_model
Комментарии:
1. 1 Вам нужно только
GROUP BY p.products_id
в MySQL, отp.products_model
которогоproducts_id
это функционально зависит, и от которого это зависит.2. Верно, но это требуется большинству других баз данных, и предполагается, что это делает код намного более зависимым от mysql. Я предпочитаю пытаться написать свой SQL как можно более независимым от базы данных, поэтому я думаю, что лучше включить все столбцы в group by.
Ответ №3:
Вам нужно использовать GROUP BY. Проверьте эту ссылку:http://www.w3schools.com/sql/sql_groupby.asp