我的问题与所附帖子中的问题非常相同,只是我的查询中需要有一个与表 1 中的周相关的 where 子句。我的 table2 (t2) 只有一列(名称)并且没有日期/时间列,而 table1 (t1) 有名称、销售额和星期。我想为 Sean 返回零,因为他在 2017 年 1 月 1 日结束的那一周没有任何销售额。
Create a third table from two tables
select * from table2:
Names
Maggie
Colleen
Laura
Sean
select * from table1:
Names Sales Week
Maggie 1800 01/01/2017
Colleen 2000 01/01/2017
Laura 4000 01/01/2017
Sean 1500 12/18/2016
select t2.Name, coalesce(t1."Employee Sales",0) "Employee Sales"
from emphis t2 left outer join
(select Name, sum(Sales) "Employee Sales"
from empdata
group by Name) t1
on t1.Name = t2.Name
Names Employee Sales
Maggie 1800
Colleen 2000
Laura 4000
Sean 1500
我要找的结果:
Names Employee Sales
Maggie 1800
Colleen 2000
Laura 4000
Sean 0
select t2.Name, coalesce(t1."Employee Sales",0) "Employee Sales"
from emphis t2 left outer join
(select Name, sum(Sales) "Employee Sales"
from empdata
group by Name) t1
on t1.Name = t2.Name
where t1.Week = date_trunc('week', now())::date - 1
postgreSQL 错误:
ERROR: column t1.Week does not exist
LINE 7: where t1.Week = date_trunc('week', now())::date - 1
我用
where t1.Week = date_trunc('week', now())::date - 1
自动化,这样我就不需要更改每个星期天的日期。
最佳答案
在子选择中移动“周”条件。这有两个好处:
- 如果某人有多个星期的销售额,您将获得该周的部分销售额。
- 如果他们没有销售额为 0 美元,他们将出现在您的列表中
像这样:
select t2.Name,
coalesce(t1."Employee Sales",0) "Employee Sales"
from emphis t2
left outer join (
select Name,
sum(Sales) "Employee Sales"
from empdata
where Week = date_trunc('week', now())::date - 1
group by Name
) t1
on t1.Name = t2.Name
关于sql - 如果没有销售,则为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41494236/