2011-01-24 78 views
4

我有两个表我想加入让我们说表a和表b。表b有许多行到表a,表b包含价格(实际上是一个购物篮)。所以我想要的是表a中的所有记录和表b中价格的总和。我曾尝试过加在左连接SQL

select a.*, sum(b.ach_sell) from bookings a 
left join pricing_line b on b.bookings = a.id 

但是,这显然不符合我的意愿,它以所有ach_sell的总和结束(因此返回一条记录)。有人愿意提供给我一个解决方案吗?现在我正在以编程方式进行此操作,而且我非常确定可以在SQL中完成它?

+0

是否切合实际做一个联盟? – 2011-01-24 12:41:31

回答

10

你的方向是对的,只是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 
+0

非常感谢! – Zoborg 2011-01-24 13:01:42

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没有。

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 

每次使用聚合(SUMCOUNTMINMAXAVG)的funcions时间您可以通过一些其他的字段集(tipically的ID),其上没有应用聚合函数需要组。

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 
+0

我会添加“sum(b.ach_sell)as summed_column”以便于寻址。 – MeanEYE 2011-01-24 12:41:27

0

如果你在select中有很多列。

像这样:

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