2011-01-24 105 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