我希望加入两个表,比如表a和表b。表b有很多行表a,表b包含价格(实际上是购物篮)。所以我想要的是表a中的所有记录和表b中的价格总和。我试过了
select a.*, sum(b.ach_sell) from bookings a
left join pricing_line b on b.bookings = a.id
然而,这显然没有按照我的意愿行事,它最终会得到所有ach_sell的总和(因此会返回一条记录)。有人会给我一个有帮助的解决方案吗?现在我以编程方式进行,我很确定它可以在SQL中完成吗?
答案 0 :(得分:10)
你的方向是对的,只需添加一个group by子句来分隔a.id,就像这样:
select a.id, sum(b.ach_sell)
from bookings a
left join pricing_line b
on b.bookings = a.id
group by a.id
答案 1 :(得分:2)
预订表中字段的分组:
select a.this, a.that, sum(b.ach_sell)
from bookings a
left join pricing_line b on b.bookings = a.id
group by a.this, a.that
答案 2 :(得分:0)
如果您不想要一个结果,则需要GROUP BY
。可能?
select a.*,
sum(b.ach_sell) as ach_sell
from bookings a
left join pricing_line b on b.bookings = a.id
GROUP BY a.id
其他RDBMS会坚持你在GROUP BY
中拥有整个列列表但是MySQL没有。
答案 3 :(得分:0)
select a.*, sum(b.ach_sell) as sum_column
from bookings a
left join pricing_line b
on b.bookings = a.id
group by a.id
每次使用聚合功能(SUM
,COUNT
,MIN
,MAX
,AVG
)时,您需要按其他一组进行分组您不应用聚合函数的字段(简称id)。
答案 4 :(得分:0)
如果您选择了多列。
像这样:
SELECT
co.checkOutOrderID,
com.companyCode,
sd.serviceDispatchCode,
cu.customerName,
com.companySimp,
ISNULL(SUM (sdlp.partsModelPrice * sdlp.partsModelNum), 0) AS total
FROM
checkoutorder co
LEFT JOIN
servicedispatchorder sd ON sd.serviceDispatchID = co.serviceDispatchID
LEFT JOIN
customer cu ON cu.customerID = co.customerID
LEFT JOIN
company com ON com.companyID = co.companyID
LEFT JOIN
servicedispatchlinkparts sdlp ON sdlp.serviceDispatchID = sd.serviceDispatchID
GROUP BY
sd.serviceDispatchID, co.checkOutOrderID,
com.companyCode, sd.serviceDispatchCode,
cu.customerName, com.companySimp