SQL Присоединение к запросу с помощью выбора - PullRequest
1 голос
/ 01 мая 2020

У меня есть одна таблица tbl_order, где столбцы:

  • id_order
  • имя пользователя
  • delivery_date et c ...

и другие таблицы tbl_order_foods, где столбцы:

  • id_order
  • id_food
  • food_quantity et c

Здесь образец pi c таблицы tbl_order

enter image description here

и таблицы tbl_order_foods

enter image description here

Здесь я хочу выбрать все продукты с количеством, ценой и единицей на основе даты доставки. Пример: Предположим, что в 2020-04-18 есть 3 заказа, в которых продукты: помидоры заказаны всего 15 кг (3 заказа * 5 количество * food_min_unit_amount * единица) и т. Д. На другие продукты.

как я могу получить список всех заказанных продуктов на основе даты поставки

Ответы [ 2 ]

1 голос
/ 02 мая 2020

Нужный метод - ключевое слово GROUP BY.

SQL группировка работает по заданным атрибутам. По вашему вопросу это будет delivery_date. В проекции (атрибуты после ключевого слова SELECT) вы можете использовать атрибуты, которые вы указали после ключевого слова GROUP BY, и функции агрегирования, например, SUM и MAX.

На основании вашего вопроса вы можете получить общую цену для всех заказов на данную дату следующим образом:

SELECT order.delivery_date, SUM(food.food_quantity) as amount, SUM(food.food_total_price) as revenue
FROM tbl_order as order 
INNER JOIN tbl_order_foods as food ON order.id_order = food.id_order
GROUP BY order.delivery_date

В результате вы получите такой список:

date | amount | revenue
------------------------
05.01|     10 |  800.00

Я не знаю, действительно ли это то, что вы будете sh. Если вы также хотите разделить его на позиции заказа, вы также должны сгруппировать BY * food_name и добавить его к проекции, в результате чего получится сумма, сгруппированная по заказам в определенный день для данного продукта.

SELECT order.delivery_date, food.food_name, SUM(food.food_quantity) as amount, SUM(food.food_total_price) as revenue
FROM tbl_order as order 
INNER JOIN tbl_order_foods as food ON order.id_order = food.id_order
GROUP BY order.delivery_date, food.food_name

Что приведет к чему-то вроде этого.

date | food_name | amount | revenue
-----------------------------------
05.01|  Tomato   |   10   |  800.00
05.01|  Apple    |   5    |  400.00
0 голосов
/ 01 мая 2020

Проверьте GROUP BY с функцией SUM, хорошая статья от Tutorialspoint.com - здесь . Единственное отличие состоит в том, что вы выполняете JOIN для создания результирующей таблицы.

  SELECT DISTINCT [f.id_food], [o.delivery_date], SUM(f.food_quantity) as [delivered_sum_qty], SUM(f.food_total_price) as [sum_food_total_price]
  FROM tbl_order o LEFT JOIN tbl_order_foods f
  ON [o.id_order] = [f.id_order]
  GROUP BY [o.delivery_date];

Если вам это нужно, довольно ясное объяснение того, как использовать JOIN, также здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...