使用 Redshift 计算特定 ID 字段中值的出现次数

Posted

技术标签:

【中文标题】使用 Redshift 计算特定 ID 字段中值的出现次数【英文标题】:Count occurrences of value in field for a particular ID using Redshift 【发布时间】:2016-01-08 18:11:11 【问题描述】:

我想计算某个 ID 特定字段中特定值的出现次数。所以我有的是这样的:

| Location ID |   Group  |
|:----------- |:---------|
| 1           |  Group A |      
| 2           |  Group B |      
| 3           |  Group C |   
| 4           |  Group A |  
| 4           |  Group B | 
| 4           |  Group C | 
| 3           |  Group A | 
| 2           |  Group B | 
| 1           |  Group C |    
| 2           |  Group A | 

而我希望通过一些计算机魔法得到的是:

| Location ID | Group A Count | Group B Count | Group C count|
|:----------- |:--------------|:--------------|:-------------|
| 1           | 1             | 0             | 1            |
| 2           | 1             | 2             | 0            |
| 3           | 1             | 0             | 1            |
| 4           | 1             | 1             | 1            |

我可以在 Redshift 中使用某种旋转功能来实现这一点吗?

【问题讨论】:

【参考方案1】:

这将需要使用 CASE 函数和 GROUP 子句,如示例所示。

SELECT l_id,
       SUM(CASE WHEN l_group = 'Group A' THEN 1 ELSE 0 END) AS a,
       SUM(CASE WHEN l_group = 'Group B' THEN 1 ELSE 0 END) AS b-- and so on
       FROM location
GROUP BY l_id;

这应该会给你这样的结果:

| l_id | a | b |
|------|---|---|
|    4 | 1 | 1 |
|    1 | 1 | 0 |
|    3 | 1 | 0 |
|    2 | 1 | 2 |

你可以在这个SQL Fiddle上玩它。

【讨论】:

以上是关于使用 Redshift 计算特定 ID 字段中值的出现次数的主要内容,如果未能解决你的问题,请参考以下文章

对于每行,字段中值的出现次数

对于每个 ID 组,考虑到已排序的 A 字段,有没有办法检查 B 字段中值的重复? (见下面的例子)

PHP - 如何回显列中值的总和?

使用 redshift 从数据库中损坏的 json 中提取特定数据

在 Redshift 中使用连接的最佳方式

Redshift - 更新 Redshift DB 中的特定列