2

我有三个表,一个用于用户表,一个用于订单,最后一个包含订单项目。

我创建了一个 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

4 回答 4

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

于 2013-09-25T15:25:45.670 回答
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
)
于 2013-09-25T15:22:12.220 回答
0

你在用oracle吗?

如果是这样,这可能是您想要的:

SUM(huxwz_user_orderitems.price) OVER (PARTITION BY huxwz_user_orderitems.orderid)

如果没有,我想您必须选择所有订单项目,选择每个订单的所有总数(按拥有分组)并加入这两个结果集。

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
于 2013-09-25T15:19:56.383 回答
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
于 2013-09-25T15:23:36.140 回答