如何使用子查询来获取总价?

时间:2018-05-03 23:01:02

标签: sql subquery

我有订单,产品和订单详情联结表。我需要找到每个订单的总价格(每个订单合并的所有产品的价格)。

https://imgur.com/eHRy6cr

我需要输出订单ID,总价格由数量*价格计算。 这是我到目前为止所得到的,但一遍又一遍输出相同的ID。它需要是一个子查询,所以加入不会在这里帮助我。

Select  order_id, (order_qty * p.price) as Order_Total
    From    order_details od, product p
    Where   p.product_id In
                (Select od.product_id
                From    order_details);

3 个答案:

答案 0 :(得分:1)

我有三个原因回答这个问题首先,应该有一个使用正确的,明确的JOIN语法的答案。其次,答案应该在语法上是正确的。第三,可以简化查询,因为不需要orders

select od.order_id, sum(od.order_qty * p.price) as Order_Total
from order_details od join
     product p
     on od.product_id = p.product_id
group by od.order_id;

答案 1 :(得分:0)

试试这个 -

Select  o.order_id, sum((od.order_qty * p.price)) as Order_Total
From    orders o, order_details od, product p
Where   
o.order_id = od.order_id
and od.product_id = p.product_id
group by order_id
;
  

输出 -

order_id    Order_Total
50125   82
50126   80
50127   196
50128   178
50129   92
50130   98

答案 2 :(得分:0)

首先回答你的问题,你可以使用JOINS来减少复杂性,其中你可以使用GROUP BY加上一个SUM来简化它,这将导致像这样的查询

SELECT A.id, B.name, SUM(B.qty * C.cost) AS total FROM A JOIN B ON A.id = B.a_id JOIN C ON C.id = A.c_id GROUP BY A.id

我在电话上对不起,如果我在查询中不具体:)

作为建议,我建议您在编写产品时在订单明细中保存产品的价值。这简化了查询,并使您的销售记录保持不变,否则每次更新产品价格时都会更改