制定SQL查询时遇到麻烦

时间:2013-11-12 19:23:18

标签: sql db2

我正在尝试制定一个查询,给出两个表:(1)Salespersons,(2)Sales;显示销售人员带来的ID,名称和销售总额。问题是,我可以获得带入钱的ID和总和,但我不知道如何添加他们的名字。此外,我的尝试省略了不卖东西的销售人员,这是不幸的。

详细说明:

有两个天真的表格:

create table Salespersons (
    id integer,
    name varchar(100)
);

create table Sales (
    sale_id integer,
    spsn_id integer,
    cstm_id integer, 
    paid_amt double
);

我想为每个销售人员显示一个查询 他们带来的总销售额。

我想到了这个问题:

select spsn_id, sum(paid_amt) from Sales group by spsn_id

此查询仅返回ID列表和带来的总金额 在,但不是销售人员的名字,它省略 没有卖光的销售人员。

如何为Salespersons中的每个销售人员进行查询 表,打印他们的ID,名称,他们的销售总和,如果他们 什么都没卖。

我感谢任何帮助!

提前致谢!

3 个答案:

答案 0 :(得分:3)

试试这个:

SELECT sp.id,sp.name,SUM(NVL(s.paid_amt,0))
FROM salespersons sp
LEFT JOIN sales s ON sp.id = s.spsn_id
GROUP BY sp.id, sp.name

即使没有销售,LEFT JOIN也会返回销售人员。

只要该用户没有销售,NVL就会给你0。

答案 1 :(得分:1)

尝试以下

select sp.id, sp.name, sum(s.paid_amt)
  from salespersons sp
  left join sales s
    on sp.id = s.spsn_id
 group by sp.id, sp.name

答案 2 :(得分:0)

或试试这个:

with t as
(select spsn_id, sum(paid_amt) as totamt
  from Sales 
  group by spsn_id 
)
select sp.id, sp.name, coalesce( t.totamt, 0 )
  from salespersons sp
  left join t  ON sp.id = t.spsn_id

其中(理论上)在连接之前进行分组,从而节省时间。

Coalesce在这里与NVL做同样的事情,但更便携。