Что-то вроде forEach в SQL?

#mysql #sql #count #sum #db2

#mysql #sql #количество #сумма #db2

Вопрос:

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

 Products
 ----------- ------- ----------- 
| productID | price | inventory |
 ----------- ------- ----------- 
| 31f9d     | 21    | 109       |
| M21xZ     | 80    | 87        |
| 56JmZ     | 35    | 48        |
 ----------- ------- ----------- 

orderDetails
 --------- ------- ---------- 
| orderId | item  | Quantity |
 --------- ------- ---------- 
| 1       | 31f9d | 2        |
| 2       | 31f9d | 5        |
| 2       | 56JmZ | 3        |
 --------- ------- ---------- 
  

Заранее спасибо!

Комментарии:

1. Это очень простой агрегированный запрос SQL. Что вы пробовали, что не сработало?

2. В языках программирования вы указываете компьютеру, как что-то делать, например, перебирать данные с помощью ForEach . SQL — это не язык программирования, а язык запросов четвертого поколения. Вы просто говорите компьютеру, что делать, а не как это делать. Вы не говорите «перебирать мои данные», а «дайте мне продукты в сочетании с суммами их заказов». СУБД должна решить, как этого добиться.

Ответ №1:

Если вам просто нужно количество продаж на продукт, вы можете агрегировать таблицу сведений:

 select item, count(*) as cnt_sales, sum(quantity) as sum_quantity
from orderdetails
group by item
  

Если вам также нужны подробности о каждом продукте, вы можете присоединиться.

 select p.*, d.cnt_sales, d.sum_quantity
from products p
left join (
    select item, count(*) as cnt_sales, sum(quantity) as sum_quantity
    from orderdetails
    group by item
) d on d.item = p.productid
  

left join Позволяет использовать продукты без какой-либо продажи; это приведет null к значениям в столбцах cnt_sales и sum_quantity в результирующем наборе.

Комментарии:

1. Спасибо! Использовал другой ответ, но также многому научился из этого!

Ответ №2:

Объедините обе таблицы вместе, затем просто сгруппируйте по ItemId:

 select p.productID, sum(o.Quantity) from Products p 
    left join orderDetails o on p.productID = o.item 
group by p.productID
  

Комментарии:

1. Кстати, вы объединяете таблицы . База данных — это целое, содержащее все таблицы.

2. Не носитель языка, хех, исправлено 🙂

3. Спасибо! это именно то, что я искал, многому научился, еще раз спасибо!