我试图从一个日志表中计算出一个基本的“出勤”报告。我的 logs
表如下所示:
TABLE logs
id | date | log |
------------------------|
123 | 2018-01-01 | 1234 |
123 | 2018-01-02 | | // Missed log
123 | 2018-01-03 | 5678 |
456 | 2018-01-01 | 5678 |
456 | 2018-01-02 | 1234 |
456 | 2018-01-03 | 1234 |
所以空条目会导致错过日期。
理想的 SELECT
结果是:
id | perc |
------------|
123 | 0.666 |
456 | 1 |
我试过以下方法,但我不知道该怎么办: SELECT id, count(*) AS attended WHERE log IS NOT NULL GROUP BY id ORDER BY attended
这意味着:
id | attended |
---------------|
123 | 2 |
456 | 3 |
这让我有一部分的方法,但我不知道如何添加一个 missed
列,然后计算百分比。稍后我将把结果连接到一个“users”表,这样就可以将名称与日志关联起来 id
s。任何帮助都将不胜感激!
2条答案
按热度按时间2nbm6dog1#
在另一个答案中建议的case条件在这里是多余的,因为count总是只计算非空记录。因此,您可以简化查询:
此外,我还根据op固定了百分比计算。
nbnkbykc2#
“条件聚合”解决了这个问题,基本上你把一个
case expression
内部count()
功能如果你使用
count(*)
比所有行都要计数,但是如果计算的值可以为null,则不计算这些null。