基于同一组中其他值的PostgreSQL Case语句

时间:2018-08-14 08:20:40

标签: postgresql group-by case psql

我有下表,并想要编写一个SELECT(在PostgreSQL中),它将产生下面的表。应该用GROUP timestamp加上timestamp的'X'和'Y'来代替,应该将其归类为'Standard',否则应归类为'Premium'在同一时间戳中只有'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; 

1 个答案:

答案 0 :(得分:0)

您将只希望按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;