我有三个表,一个是用户表,一个是订单,另一个是包含订单项。
我创建了一个SQL查询,它获取所有订单并将用户加入到结果中,现在我想将订单项加入查询中。一个订单可以有多个订单商品。每个订单商品都有价格。我需要与order_item对应的所有order_items的总和。
所以我会得到一个如下所示的结果: id,order_id,userid,order_time,id,name,email,price
现在我的查询看起来是这样的:
SELECT huxwz_user_orders.*, huxwz_users.name, huxwz_users.email, huxwz_users.id, SUM(huxwz_user_orderitems.price)
FROM huxwz_user_orders
LEFT OUTER JOIN huxwz_users ON (
huxwz_user_orders.userid = huxwz_users.id
)
LEFT OUTER JOIN huxwz_user_orderitems ON (
huxwz_user_orders.id = huxwz_user_orderitems.orderid
)
事情是,SUM正在对所有订单项进行求和,这意味着我只得到一个结果:/
关于如何解决这个问题的任何想法?
答案 0 :(得分:1)
SELECT huxwz_user_orders.*, huxwz_users.name, huxwz_users.email, huxwz_users.id, SUM(huxwz_user_orderitems.price)
FROM huxwz_user_orders
LEFT OUTER JOIN huxwz_users ON (
huxwz_user_orders.userid = huxwz_users.id
)
LEFT OUTER JOIN huxwz_user_orderitems ON (
huxwz_user_orders.id = huxwz_user_orderitems.orderid
)
Group BY huxwz_user_orderitems.orderid
ORDER BY huxwz_user_orders.id
我做了这个,看起来很完美,因为我希望它,感谢分组信息,它的工作原理! :3
答案 1 :(得分:0)
您使用的是oracle吗?
如果是这样,这可能就是你想要的:
SUM(huxwz_user_orderitems.price) OVER (PARTITION BY huxwz_user_orderitems.orderid)
如果没有,我猜您必须选择所有订单商品,选择每个订单的所有总计(按订单分组)并加入这2个结果集。
SELECT a.*, b.total
FROM
(SELECT huxwz_user_orders.*, huxwz_users.name, huxwz_users.email, huxwz_users.id
FROM huxwz_user_orders
LEFT OUTER JOIN huxwz_users ON (
huxwz_user_orders.userid = huxwz_users.id
)
LEFT OUTER JOIN huxwz_user_orderitems ON (
huxwz_user_orders.id = huxwz_user_orderitems.orderid
)
) a,
(
SELECT o.id, SUM(oi.price) total
FROM huxwz_user_orders o,
JOIN huxwz_user_orderitems oi ON o.id = oi.orderid
GROUP BY o.id
) b
答案 2 :(得分:0)
您必须从选择中删除星号,然后像这样放置GROUP BY:
SELECT huxwz_user_orders.field1, huxwz_users.name, huxwz_users.email, huxwz_users.id,
SUM(huxwz_user_orderitems.price)
FROM huxwz_user_orders
LEFT OUTER JOIN huxwz_users ON (
huxwz_user_orders.userid = huxwz_users.id
)
LEFT OUTER JOIN huxwz_user_orderitems ON (
huxwz_user_orders.id = huxwz_user_orderitems.orderid
)
GROUP BY huxwz_user_orders.field1, huxwz_users.name, huxwz_users.email, huxwz_users.id
或者您可能更容易使用嵌套查询:
SELECT huxwz_user_orders.field1, huxwz_users.name, huxwz_users.email, huxwz_users.id,
(SELECT SUM(price) FROM huxwz_user_orderitems WHERE huxwz_user_orders.id = orderid) AS price
FROM huxwz_user_orders
LEFT OUTER JOIN huxwz_users ON (
huxwz_user_orders.userid = huxwz_users.id
)
答案 3 :(得分:0)
SELECT huxwz_user_orders.*, huxwz_users.name, huxwz_users.email, huxwz_users.id, SUM(huxwz_user_orderitems.price)
FROM huxwz_user_orders
LEFT OUTER JOIN huxwz_users ON (
huxwz_user_orders.userid = huxwz_users.id
)
LEFT OUTER JOIN huxwz_user_orderitems ON (
huxwz_user_orders.id = huxwz_user_orderitems.orderid
)GROUP BY
huxwz_users.name, huxwz_users.email, huxwz_users.id