我有一个工作查询,它按硬件模型和结果对数据进行分组,但问题是有很多“结果”。我试图将其减少到“如果结果 = 0,则保持为 0,否则将其设置为 1”。这通常有效,但我最终有:
day | name | type | case | count
------------+----------------+------+------+-------
2013-11-06 | modelA | 1 | 0 | 972
2013-11-06 | modelA | 1 | 1 | 42
2013-11-06 | modelA | 1 | 1 | 2
2013-11-06 | modelA | 1 | 1 | 11
2013-11-06 | modelB | 1 | 0 | 456
2013-11-06 | modelB | 1 | 1 | 16
2013-11-06 | modelB | 1 | 1 | 8
2013-11-06 | modelB | 3 | 0 | 21518
2013-11-06 | modelB | 3 | 1 | 5
2013-11-06 | modelB | 3 | 1 | 7
2013-11-06 | modelB | 3 | 1 | 563
而不是我试图实现的聚合,每个类型/案例组合只有 1 行。
day | name | type | case | count
------------+----------------+------+------+-------
2013-11-06 | modelA | 1 | 0 | 972
2013-11-06 | modelA | 1 | 1 | 55
2013-11-06 | modelB | 1 | 0 | 456
2013-11-06 | modelB | 1 | 1 | 24
2013-11-06 | modelB | 3 | 0 | 21518
2013-11-06 | modelB | 3 | 1 | 575
这是我的查询:
select CURRENT_DATE-1 AS day, model.name, attempt.type,
CASE WHEN attempt.result = 0 THEN 0 ELSE 1 END,
count(*)
from attempt attempt, prod_hw_id prod_hw_id, model model
where time >= '2013-11-06 00:00:00'
AND time < '2013-11-07 00:00:00'
AND attempt.hard_id = prod_hw_id.hard_id
AND prod_hw_id.model_id = model.model_id
group by model.name, attempt.type, attempt.result
order by model.name, attempt.type, attempt.result;
关于我如何实现这一目标的任何提示都会很棒。
Day 将始终在WHERE
子句中定义,因此不会变化。name, type, result(case)
并且count
会有所不同。简而言之,对于任何给定的模型,每个“类型 + 案例”组合我只需要 1 行。正如您在第一个结果集中看到的那样,我有 3 行modelA
具有type=1
和case=1
(因为有许多“结果”值我已经变成0=0 和其他任何值=1)。我希望将其表示为 1 行,并在示例数据集 2 中聚合计数。