求和左连接SQL

时间:2011-01-24 12:36:42

标签: sql mysql

我希望加入两个表,比如表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中完成吗?

5 个答案:

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

每次使用聚合功能(SUMCOUNTMINMAXAVG)时,您需要按其他一组进行分组您不应用聚合函数的字段(简称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