MYSQL ВНУТРЕННИЕ СОЕДИНЕНИЯ И ГРУППЫ ПО - PullRequest
0 голосов
/ 12 марта 2020

У меня есть таблица продуктов, в которой хранятся такие сведения о продукте, как имя, цена, img и т. Д. c, и таблица заказов, в которой записываются заказы. В таблице заказов я храню единственный product_id из продуктов и хочу сгруппировать свои результаты. Например, в моей таблице продуктов у меня есть

product_id, product_name, product_price
1           apple         10
2           juice         5
3           pineapple     7.5

Что касается моей таблицы заказов, например, у меня есть

order_id, product_id, quantity, date
1         1           3         20.02.2020
2         3           2         22.12.2019
3         3           4         12.12.2020
4         1           2         12.02.2020

Я хочу Сгруппировать свою таблицу ORDERS по названию продукта и количеству Для пример

product_name, quantity, price
apple         5         50
pineapple     6         45

А вот мой запрос

SELECT 
products.product_id, 
products.product_name,
products.product_price AS price,
orders.quantity AS col,
orders.by_date,
(SELECT SUM(price * col)) AS total
FROM products
INNER JOIN orders ON products.product_id = orders.product_id
GROUP BY products.product_id,   
     products.product_name,
     orders.order_id

И результат не такой, как ожидалось

Я не совсем уверен, что я делаю неправильно. Нужно ли делать подзапрос?

Ответы [ 3 ]

2 голосов
/ 12 марта 2020
SELECT 
  p.product_name,
  SUM(o.quantity) AS quantity,
  SUM(o.quantity * p.product_price) AS price
FROM products p
INNER JOIN orders o
ON p.product_id = o.product_id
GROUP BY 
  p.product_name

Вышеуказанного должно быть достаточно для получения результата

roduct_name, quantity, price
apple         5         50
pineapple     6         45
1 голос
/ 12 марта 2020

Подзапрос не требуется ...

SELECT p.product_id, p.product_name
  , SUM(o.quantity)
  , SUM(o.quantity) * p.product_price AS price
FROM products AS p 
INNER JOIN orders AS o
ON p.product_id = o.product_id
GROUP BY p.product_id, p.product_name, p.price
;
1 голос
/ 12 марта 2020

Первый агрегат в таблице orders, а затем присоединение к продуктам:

SELECT 
  p.product_id, 
  p.product_name,
  o.quantity,
  o.quantity * p.product_price AS price
FROM products p INNER JOIN(
  SELECT product_id, SUM(quantity) AS quantity
  FROM orders
  GROUP BY product_id
) o ON o.product_id = p.product_id

См. Демонстрацию. Результаты:

| product_id | product_name | quantity | price |
| ---------- | ------------ | -------- | ----- |
| 1          | apple        | 5        | 50    |
| 3          | pineapple    | 6        | 45    |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...