首页 > 解决方案 > 在子查询中分组查询以获取列值作为列名

问题描述

我在我的数据库中的数据:

| id| some_id|  status|
|  1| 1      | SUCCESS|
|  2| 2      | SUCCESS| 
|  3| 1      | SUCCESS| 
|  4| 3      | SUCCESS| 
|  5| 1      | SUCCESS| 
|  6| 4      | FAILED | 
|  7| 1      | SUCCESS|
|  8| 1      | FAILED |
|  9| 4      | FAILED |
| 10| 1      | FAILED |
....... 

我运行查询以按 id 和状态分组以获得以下结果:

| some_id| count|  status|
| 1      |    20| SUCCESS| 
| 2      |    5 | SUCCESS| 
| 3      |    10| SUCCESS| 
| 2      |    15| FAILED | 
| 3      |    12| FAILED | 
| 4      |   25 | FAILED | 

我想使用上面的查询作为子查询来获得下面的结果,其中不同的状态是列名。

| some_id| SUCCESS|  FAILED|
| 1      |    20  |  null/0| 
| 2      |    5   |  15    | 
| 3      |    10  |  12    | 
| 4      |  null/0|  25    | 

任何其他获取最终数据的方法也值得赞赏。如果需要更多信息,请告诉我。

谢谢

标签: sqlpostgresqlgroup-bysubquery

解决方案


您可以借助以下工具在此处使用数据透视查询FILTER

SELECT
    some_id,
    COUNT(*) FILTER (WHERE status = 'SUCCESS') AS SUCCESS,
    COUNT(*) FILTER (WHERE status = 'FAILED')  AS FAILED
FROM yourTable
GROUP BY
    some_id;

演示


推荐阅读