我正在尝试制定一个查询,给出两个表:(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,名称,他们的销售总和,如果他们 什么都没卖。
我感谢任何帮助!
提前致谢!
答案 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做同样的事情,但更便携。