2016-01-08 2 views
2

Я хочу подсчитать вхождения определенных значений в определенное поле для идентификатора. Так что у меня есть это:Подсчет значений значения в поле для конкретного идентификатора с использованием Redshift

| 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 для достижения этой цели ?

ответ

3

Для этого потребуется использовать функцию 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.

Смежные вопросы