【发布时间】:2014-08-08 01:40:22
【问题描述】:
一直在用这个敲我的头。
我有两张桌子
员工
- 身份证
- 姓名
- 有效
- user_id
报告
- 身份证
- employee_id
- user_id
- created_at
- 还有更多
我想选择具有特定 user_id 的员工,并添加一个列,其中包含该特定员工 (employee_id) 在特定年份的报告计数。
这是我尝试过的,但没有成功。
SELECT c.id, c.name, c.active, c.user_id, COUNT( u.id ) no_of_reports
FROM employee c
LEFT JOIN report u ON c.id = u.employee_id
WHERE c.user_id =1
AND YEAR( u.created_at ) = '2014'
GROUP BY c.id, c.name
ORDER BY c.name ASC
一切正常,除非我为我的 LEFT JOIN 设置条件。如果 created_at 列在 2014 年之内,我只希望它计算 u.id。这很好,但如果没有 u.ids(意味着该员工没有报告),则整个员工都被排除在外,而不是仅仅将 no_of_reports 设置为 0,并且仍然在我的结果中将 id、name、active 和 user_id 作为一行提供给我。
删除 AND YEAR(u.created_at)='2014' 给了我正确的结果,除了它包括在 2014 年之外创建的报告。
【问题讨论】:
-
你考虑过子查询吗?