我有一个sales
表,一个sale_staff
表,一个staff
表和一个offices
表。
我们正在销售房产,我想知道X月和每个办公室的每个卖家的销售数量。
数据透视表看起来像这样
sale_id , staff_id , type
type
可以是seller
或lister
,因此我需要一个where子句。
sales
表对offices
表有一个FK; office_id
到目前为止我所知道的是,我知道它完全错了,但这就是为什么我在这里 - 我需要修理这笔款项并在办公室桌面上加上办公室名称,所以
select st.first_name, st.last_name, office, count(*) as sold
from sales s, sale_staff ss
left join staff st
on st.id = ss.staff_id
left join offices off
on off.id = s.office_id
where ss.`type` = 'lister' and
year(s.sale_date) = 2017 and
month(s.sale_date) = 12
group by st.id
销售表只是一个物业销售项目,价格,地址,office_id。
除了错误unknown column s.office_id
之外,正如我所说,总和值无论如何都是错误的。我真的没有足够的经验来理解这种级别的关系加入和聚合,请指点。
基本上我想简单地看一下像
这样的结果集staff(seller) , count , office
Mike , 12 , West
Jim , 7 , East
Fred , 3 , East
编辑:SQLFiddle如果有帮助:)将添加一些示例测试数据。
答案 0 :(得分:1)
从不在FROM
子句中使用逗号。 始终使用正确的,明确的JOIN
语法。你的问题是因为逗号的范围规则。
我建议:
select st.first_name, st.last_name, o.office, count(*) as sold
from staff st left join
sale_staff ss
on st.id = ss.staff_id join
sales sa
on sa.sale_id = ss.sale_id join
offices o
on o.id = s.office_id
where ss.`type` = 'lister' and
s.sale_date >= '2017-12-01' and
s.sale_date < '2018-01-01'
group by st.first_name, st.last_name, o.office;
我认为这有正确的连接条件,但很难确定没有样本数据和期望的结果。
注意:
left join
可能没有必要。如果是,你可能应该从员工表开始(以保留所有员工)。group by
包含from
中的所有非汇总列。如果你正在学习SQL,这是一个好习惯。