mysql - 子查询没有输出正确的结果?

标签 mysql sql select

我希望有人可以帮助我解决这个问题,我一直在尝试不同的组合,但似乎无法得到正确的结果。

首先我有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/

相关文章:

mysql:查找 mysql 列中的最短和最长值

MYSQL如果不存在则插入数据

sql - 在 SQL Server 中使用具有两个条目(值)的同一个表中的另一列更新列

java - SQL 中的选择语句、联接和重新调整查询用途

python - 在 SQLAlchemy 中更改 where 子句而不生成子查询

c++ - mysql 连接器/C++ 手册

php - PHP MySQL 中的循环内循环

sql - 通过 SQL UPDATE 更新 Excel 数据

mysql - SQL中的字符串到整数的转换是自动的吗?

c++ - linux C++ 套接字选择循环