在连接语句MySQL中求和项

时间:2013-09-25 15:12:16

标签: mysql sql join

我有三个表,一个是用户表,一个是订单,另一个是包含订单项。

我创建了一个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正在对所有订单项进行求和,这意味着我只得到一个结果:/

关于如何解决这个问题的任何想法?

4 个答案:

答案 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