Vertica DB 中的封装分组依据或条件聚合

Encapsulated Group by or conditional aggregation in Vertica DB

我在 Vertica 数据库中有以下 table:

+---------+-------+
| Readout | Event |
+---------+-------+
|       1 | A     |
|       1 | B     |
|       1 | A     |
|       2 | B     |
|       2 | A     |
+---------+-------+

我想对每个读数进行分组并计算事件的频率,从而得到 table 如下所示:

+---------+----------------+----------------+-----------------+
| Readout | Count(Readout) | Count(Event A) | Count (Event B) |
+---------+----------------+----------------+-----------------+
|       1 |              3 |              2 |               1 |
|       2 |              2 |              1 |               1 |
+---------+----------------+----------------+-----------------+

我确定有一个简单的 GROUP BY 命令,但我无法理解它。

您需要条件聚合:

select readout, count(*),
       sum(case when event = 'A' then 1 else 0 end) as num_a,
       sum(case when event = 'B' then 1 else 0 end) as num_b
from t
group by readout;