GROUPBY 的聚合表达式问题

Aggregate expression issue with GROUPBY

我正在尝试进行简单的百分比计算,但无论我做什么,我的字段 accuracy 都会以 0 结束。我也试过将其转换为 DOUBLE 但没有成功。两个输入都单独生成一个数字,所以我不明白为什么我总是得到 0 结果。我只想在给定的月份做 (# of TRUE/Records)。我怀疑这里的问题是我按月分组但不知道如何解决。

我是否需要将计数作为除法的子查询,或者我可以在一个查询中完成这一切吗?

Table

+------------+-------+----+
| Date       | reg   | id |
+------------+-------+----+
| 2020-05-01 | TRUE  | 1  |
+------------+-------+----+
| 2020-05-02 | TRUE  | 2  |
+------------+-------+----+
| 2020-05-03 | FALSE | 3  |
+------------+-------+----+
| 2020-05-03 | TRUE  | 4  |
+------------+-------+----+
| 2020-05-03 | TRUE  | 5  |
+------------+-------+----+
| 2020-05-04 | FALSE | 6  |
+------------+-------+----+

查询

SELECT
    SUBSTR(date, 1, 7) as month_year,
    SUM(CASE WHEN reg = FALSE THEN 1 ELSE 0 END) as error,
    SUM(CASE WHEN reg = TRUE THEN 1 ELSE 0 END) as valid,
    COUNT(reg) as records,
    ROUND(SUM(CASE WHEN reg = TRUE THEN 1 ELSE 0 END)/COUNT(reg), 2) as accuracy
FROM table
GROUP BY 1
ORDER BY 1 DESC
LIMIT 13

Presto 可能会做整数除法。但是,无论如何您都不需要除法。替换:

ROUND(SUM(CASE WHEN reg = TRUE THEN 1 ELSE 0 END)/COUNT(reg), 2) as accuracy

与:

ROUND(AVG(CASE WHEN reg = TRUE THEN 1.0 ELSE 0 END), 2) as accuracy

= TRUE 是多余的,但我保留它是因为您的代码中有它。