mysql - 通过 JOIN 问题添加了 COUNT 两次

标签 mysql join count

我正在开发一个项目,其中的报告具有三种状态:“已检查”、“处理中”和“已完成”

有两张 table !

tbl_tracking - 用于跟踪报告

    report_id   usr_id   date        status
    ----------------------------------------------
    0000        abc      2014/04/05  checked
    0001        abc      2014/04/05  checked
    0000        abc      2014/04/05  inprocess
    0001        abc      2014/04/05  completed
    0002        abc      2014/04/06  completed
    0004        xyz      2014/04/05  checked
    0005        xyz      2014/04/06  checked
    

tbl_timestatus - 用于跟踪员工处理报告的时间

    usr_id   date        time_worked (hrs)
    ----------------------------------------------
    abc      2014/04/05  6
    abc      2014/04/06  5
    

现在我想创建一个 View 来始终显示所有内容的最新状态,因此我编写了此代码

    CREATE VIEW VW_STATUS AS
    SELECT tb1.usr_id, tb1.date,
    COUNT(CASE tb1.status WHEN 'checked' THEN 1 ELSE NULL END) AS checkedcount,
    COUNT(CASE tb1.status WHEN 'inprocess' THEN 1 ELSE NULL END) AS inprocesscount,
    COUNT(CASE tb1.status WHEN 'completed' THEN 1 ELSE NULL END) AS compltedcount,
    CASE WHEN (tb1.usr_id=tb2.usr_id AND tb1.date=tb2.date) THEN tb2.time_worked ELSE NULL END AS timeworked
    FROM tbl_tracking tb1, tbl_timestatus tb2
    GROUP BY tb1.usr_id, tb1.date;
    

预期输出:

    usr_id   date        checkedcount   inprocesscount   completedcount   timeworked
    ---------------------------------------------------------------------------------------
    abc      2014/04/05  2              1                1                6
    abc      2014/04/06  0              0                1                5
    xyz      2014/04/05  1              0                0                NULL
    xyz      2014/04/06  1              0                0                NULL
    

实际输出:

    usr_id   date        checkedcount   inprocesscount   completedcount   timeworked
    ---------------------------------------------------------------------------------------
    abc      2014/04/05  4              2                2                6
    abc      2014/04/06  0              0                2                5
    xyz      2014/04/05  2              0                0                NULL
    xyz      2014/04/06  2              0                0                NULL
    

虽然“timeworked”值保持正确,但计数(*)将自身相加两次!连接出现问题!需要同样的帮助..

最佳答案

你应该像下面这样尝试。请参阅此处的示例 fiddle http://sqlfiddle.com/#!3/0b24c/6

CREATE VIEW VW_STATUS AS
SELECT tb1.usr_id, tb1.date,
COUNT(CASE tb1.status WHEN 'checked' THEN 1 ELSE NULL END) AS checkedcount,
COUNT(CASE tb1.status WHEN 'inprocess' THEN 1 ELSE NULL END) AS inprocesscount,
COUNT(CASE tb1.status WHEN 'completed' THEN 1 ELSE NULL END) AS compltedcount,
tb2.time_worked
FROM tbl_tracking tb1
LEFT JOIN tbl_timestatus tb2
   ON tb1.usr_id=tb2.usr_id 
    AND tb1.date=tb2.date   
    GROUP BY tb1.usr_id, tb1.date , tb2.time_worked
    ORDER BY tb1.usr_id;

结果

enter image description here

关于mysql - 通过 JOIN 问题添加了 COUNT 两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23450834/

相关文章:

Oracle USING 子句最佳实践

mysql - 连接三个表(2 级)并根据条件求和 - SQL Rails

sql - 从多个表中获取记录

计算数组中值为 1 的位数 - 理解其背后的代码 (C)

java - 使用 hashmap 改进词频计数

mysql - 更新 mysql 表时编译准备语句时出现问题

php - 我的服务器返回空白页面,角落里有 'null'

java - 使用java更改HashMap中的部分值

mysql - 在 "Column Name"上创建外键时出错(检查数据类型)?

java - 查找并显示字符串中的连续重复组合