【发布时间】:2016-02-26 19:50:25
【问题描述】:
我正在做一个查询,我从一个名为employee 的表中选择所有内容,并希望从另外两个表中计算employee_id,并在2 个单独的列中表示计数。
表格:
- 员工[身份证等]
- 报告 [id、employee_id 等]
- office_report[id、employee_id 等]
到目前为止我所做的是:
SELECT emp.*, COUNT(rep.id ) no_of_field_reports, COUNT(of_rep.id) no_of_office_reports
FROM employee emp
LEFT JOIN report rep
ON (emp.id = rep.employee_id)
LEFT JOIN office_report of_rep
ON (emp.id = of_rep.employee_id)
WHERE emp.user_id =7 AND emp.active = 1
GROUP BY emp.id, emp.name
ORDER BY emp.name ASC
问题是,一旦我在两个报告表中都有报告,计数就会混乱。假设我在 report table 中有 16 个报告,在 office_report 表中有 2 个报告,no_of_field_reports 和 no_of_office_reports 的计数将变为32.
我显然遗漏了一些东西,但由于我不是 SQL 天才,我不知道是什么。
请务必解释导致问题的原因,以便我能够从错误中吸取教训并更好地理解这些类型的查询,因为这不会是最后一次。
我猜对于 mariaDB、mySQL 和 SQL 来说,答案通常是相同的,所以我添加了所有这些标签以引起注意..
【问题讨论】:
-
几个选项。使用每个表的唯一 ID 的不同计数或将计数作为内联视图。计数混乱的原因是表之间的基数夸大了计数。
-
@xQbert 将 DISTINCT 添加到我的 SELECT 似乎不起作用..我想我做错了..