代码之家  ›  专栏  ›  技术社区  ›  petehallw

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

  •  0
  • petehallw  · 技术社区  · 6 年前

    我有下表要写一个 SELECT (在PostgreSQL中)将生成它下面的表。它应该 GROUP 通过 timestamp 有“x”和“y”的地方 时间戳 如果同一时间戳中只有“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 回复  |  直到 6 年前
        1
  •  0
  •   JGH    6 年前

    您将希望分组依据 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;