MySQL的加入和多列在选择
问题描述:
我的数据库看起来如下MySQL的加入和多列在选择
表名称:订单明细
id oid pid pquantity pprice
--------------------------------------
1 1 5 2 10
2 1 6 3 5
3 1 7 1 20
5 2 8 1 5
6 2 9 1 5
7 3 5 5 10
表名称:订单
id odiscount oshipping
----------------------------
1 5 5
2 0 5
3 0 5
我想发票金额每个订单。 (pquantity*pprice)-odiscount+oshipping
。棘手的部分是,每个订单可以有多个条目按顺序细节。所以我无法弄清楚如何处理这个问题。最终结果应该是
oid total
1 55
2 15
3 55
我试过这个使用下面的SQL,但我无法弄清楚如何获取多个行的细节到帐户。
SELECT SUM((orderdetails.pprice*orderdetails.pquantity) - orders.odiscount + orders.oshipping) FROM orders LEFT JOIN orderdetails ON orderdetails.oid = orders.id GROUP BY orders.id
答
我相信你可以做到这一点,甚至没有使用子查询:
SELECT SUM(od.pquantity*od.pprice) + AVG(o.oshipping - o.odiscount)
FROM Orders o
INNER JOIN OrderDetails od
ON o.id = od.oid
GROUP BY o.id
在这里演示:
SQLFiddle
答
你可以组order_details
查询第一,然后才加入它的orders
表:
SELECT sum_details - odiscount + oshipping
FROM orders o
JOIN (SELECT oid, SUM(pquantity * pprice) AS sum_details
FROM order_details
GROUP BY oid) d ON o.id = d.oid
使用子查询有什么问题? – sagi
我同意这可能是要走的路,但我对评论的态度非常困惑。 – Strawberry
@Strawberry Sagi经常在我的答案上留下一大堆评论,创造出一无所有的谈话,希望他的回答看起来比原来更加原始,因此比其他人更加正确。评论:这种策略似乎工作得很好(虽然我不使用它)。 –