首页 > 解决方案 > 基于同一组中其他值的 PostgreSQL 案例语句

问题描述

我有下表,并想编写一个SELECT(在 PostgreSQL 中)将生成它下面的表。它应该GROUPtimestamp一个“X”和一个“Y”具有相同的timestamp,它应该被归类为“标准”,否则如果在同一时间戳中只有“X”,则它应该被归类为“高级”。

|         timestamp       | data |
|--------------------------------|
| 2018-08-13 09:26:10.872 |  X   |
| 2018-08-13 09:26:10.872 |  Y   |
| 2018-08-13 09:26:11.125 |  X   |
| 2018-08-13 09:26:11.125 |  X   |

|        timestamp        |   type   |
|-------------------------|----------|
| 2018-08-13 09:26:10.872 | Standard |
| 2018-08-13 09:26:11.125 | Premium  |

我已经写了以下内容:

SELECT 
    timestamp,
    CASE
        WHEN -- ??
        THEN 'Standard'
        ELSE 'Premium'
    END AS type
FROM my_table
GROUP BY timestamp, type; 

标签: postgresqlgroup-bycasepsql

解决方案


您将只想分组timestamp,并计算不同的data条目。要从此计数中获取布尔值(由 要求case when),您可以将其与 1 进行比较:

SELECT 
    timestamp,
    CASE
        WHEN count(distinct data) > 1
        THEN 'Standard'
        ELSE 'Premium'
    END AS type
FROM my_table
GROUP BY timestamp; 

推荐阅读