从一个表中选择值,从另一表中计算公共值,如果没有公共值则显示0

时间:2019-02-07 23:27:46

标签: sqlite join count

我有两个表,如下所示:

WORKDAYS
DATE       | WORKDAY_LENGHT |
-----------+----------------+
12-05-2018 |       8        |
13-05-2018 |       6.5      |
14-05-2018 |       7.5      |
15-05-2018 |       8        |
ACCIDENTS
       TOD       | SEVERITY  | 
-----------------+-----------+
12-05-2018 12:00 |  minor    | 
12-05-2018 15:00 |  minor    |
13-05-2018 08:00 |  severe   |
13-05-2018 12:00 |  severe   |
14-05-2018 10:30 |  severe   |

我需要一个如下结果:

WORKDAYS
DATE       | WORKDAY_LENGHT | ACCIDENTS_COUNT|
-----------+----------------+----------------+
12-05-2018 |       8        |       2        |
13-05-2018 |       6.5      |       2        |
14-05-2018 |       7.5      |       1        |
15-05-2018 |       8        |       0        |

到目前为止,我尝试过的是:

SELECT DISTINCT 
     w.date, 
            (
             SELECT 
                    COUNT(*) 
             FROM 
                    accidents a 
             WHERE 
                   date(w.date) = date(a.tod)
             ) 
      AS accidents_count 
 FROM 
      workdays w

这给了我一个正确方向的答案。像这样:

WORKDAYS
DATE       | WORKDAY_LENGHT | ACCIDENTS_COUNT|
-----------+----------------+----------------+
12-05-2018 |       8        |       1        |
12-05-2018 |       8        |       1        |
13-05-2018 |       6.5      |       1        |
13-05-2018 |       6.5      |       1        |
14-05-2018 |       7.5      |       1        |
15-05-2018 |       8        |       0        |

这是sqlite,因此日期值存储为字符串。因此,日期函数应该使它们只是日期,对吗?还是那个引起问题的?

1 个答案:

答案 0 :(得分:0)

我错过了group by,在弄清楚这个问题之前对提出一个问题感到ham愧。

添加GROUP BY date(w.date)是这里的解决方案。