我有两张桌子。一个是包含员工信息的员工表,另一个表是员工的销售额。我试图将员工在一个月内的销售总额分组,包括他/她实现零销售的月份。以下是表格中的一些值
员工表
number name
1 Matt
2 Foggy
3 Karen
4 Wilson
销售
employee_number month sale_number sale_amount
1 January 2015 1 300
1 January 2015 2 50
1 February 2015 1 400
2 March 2015 1 300
3 January 2015 1 50
我能够使用以下查询编写查询以获取月度销售额
select sum(sales.sale_amount), sales.employee_number, sales.month, sales.sale_number
from sales group by employee_number, month;
现在因为我还需要包括零的月份,我认为在不同月份的外部联接应该可以做到这一点。但是输出仍然包含之前的相同输出,没有零或null。左外连接是否不加入空值?
输出应该是这样的。
number name sale_amount sale_month
1 Matt 350 January 2015
1 Matt 400 February 2015
1 Matt 0 March 2015
2 Foggy 0 January 2015
2 Foggy 0 February 2015
2 Foggy 300 March 2015
等等。
答案 0 :(得分:1)
left outer join
会为右手表中的缺失行提出null
值。要显示所有月份,您需要切换表格的顺序:
from months
cross join
employees
left outer join
sales
on sales.month = months.month
and employees.number = sales.employee_number
如果你错过了月份表,你可以从销售表中找到一个:
select months.month
, employees.name
, sum(sale_amount) as sales
from (
select distinct month
from sales
) as months
cross join
employees
left outer join
sales
on sales.month = months.month
and employees.number = sales.employee_number
group by
months.month
, employees.name
答案 1 :(得分:0)
以下查询可以帮助您:
SELECT q1.month, q1.number, q2.total_sales FROM
(SELECT distinct s.month, e.number
FROM sales s, Employees e) AS q1
LEFT JOIN
(SELECT SUM(sales.sale_amount) AS total_sales, sales.employee_number, sales.month, sales.sale_number
FROM sales group by employee_number, month) AS q2
ON (q1.month = q2.month) AND (q1.number = q2.employee_number)
ORDER BY month, number;
检查fiddle