我希望有人可以帮助我解决这个问题,我一直在尝试不同的组合,但似乎无法得到正确的结果。
首先我有3张表,category、department、master,master有FK。我想获得每个部门的总时间总和以及按部门分组的总时间总和,以便我可以看到哪个部门对该类别有多少时间,所有这些都应该按部门分组并按正确的顺序?
我可以获得结果,但结果不正确,这是我的代码...
SELECT a.department, time_spent , COUNT(DISTINCT (a.department)), sum_quarantine FROM
(SELECT d.department, SUM(time_spent) as time_spent
FROM master as m
INNER JOIN department as d ON d.dept_id = m.dept_id GROUP BY d.department) AS a,
(SELECT d.department, c.category, SUM(time_spent) as sum_quarantine
FROM master as m
INNER JOIN category as c ON c.cat_id = m.cat_id
INNER JOIN department as d ON d.dept_id = m.dept_id
WHERE category = 'Quarantine' GROUP BY d.department) as b
GROUP BY b.department
最佳答案
您想要的可以在没有子查询的情况下完成,在SUM
中使用CASE WHEN
,这样它就只对您感兴趣的内容进行求和('检疫'):
SELECT d.department,
SUM(CASE c.category
WHEN 'Quarantine' THEN time_spent
END) as sum_quarantine,
SUM(time_spent) time_spent,
COUNT(DISTINCT (c.category)) category_count
FROM master as m
INNER JOIN category as c ON c.cat_id = m.cat_id
INNER JOIN department as d ON d.dept_id = m.dept_id
GROUP BY d.department
ORDER BY 1
这里是fiddle .
请注意,我也添加了一个计数,因为您的尝试中有一个。但你的总是返回 1,所以我不确定你在寻找什么。我添加了与该部门链接的类别数量。
此外,您没有指定所需的顺序,但很容易修改 ORDER BY
子句。上面的查询按部门对结果进行排序,但如果您想按第二列降序排序,则执行以下操作:
...
ORDER BY 2 DESC
如果您的结果包含 NULL 值,并且您更喜欢使用零,那么请使用 COALESCE功能。例如:
COALESCE(SUM(time_spent), 0) time_spent,
关于mysql - 子查询没有输出正确的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34686762/