67282


postgreで同じテーブルにそれぞれ別のwhere区指定をしたselect文を結合したいです。

select文に例えますと、

[code]

    SELECT * FROM a WHERE a.id = '50' AND a.id = '55';
    
     id |   日時   | 最大値 | 最大起時 |
    ---------------+--------+----------+
     50 | 20200101 | 7.3    |          | 
     55 | 20200101 |        | 15:30    | 
    ------------------------------------
    
[/code]

上記の空白をなくして以下の結果のように最大値の隣に最大起時を載せたい感じです。

[code]

    SELECT * FROM a WHERE a.id = '50' AND a.id = '55';
    
       日時   | 最大値 | 最大起時 |
    ---------+--------+----------+
     20200101 | 7.3    | 15:30    | 
    ------------------------------------
    
[/code]


CC BY-SA 4.0
2020-06-04T04:27:03.007
67275
2020-06-04T09:23:17.940
2020-06-04T05:47:49.150
36855
36855
question
postgresql
PostgreSQLで同じテーブルにそれぞれ別のwhere区指定をしたselect文を結合したいです。


クエリ結果を1行にまとめるには[集約関数](http://tatsuo-ishii.github.io/doc-ja/12.0/functions-
aggregate.html)か[COALESCE](http://tatsuo-ishii.github.io/doc-
ja/12.0/functions-conditional.html#FUNCTIONS-COALESCE-NVL-
IFNULL)関数で整形する必要があります。

[code]

    -- サンプルデータ
    with a as (select 50 id, '20200101' 日付, 7.3 最大値, null 最大起時 union all
               select 55 id, '20200101' 日付, null 最大値, '15:30' 最大起時 union all
               select 60 id, '20200101' 日付, 999 最大値, '00:00' 最大起時)
    -- 回答SQL(集約関数のMAXで1行にまとめる)
    select   max(日付) 日付, max(最大値) 最大値, max(最大起時) 最大起時
    from     a
    where    id in (50, 55)
    union all
    -- 回答SQL(coalesceで1行にまとめる)
    select   coalesce(a1.日付, a2.日付) 日付, coalesce(a1.最大値, a2.最大値) 最大値, coalesce(a1.最大起時, a2.最大起時) 最大起時
    from     a a1, a a2
    where    a1.id = 50
    and      a2.id = 55
    
[/code]


CC BY-SA 4.0
2020-06-04T09:23:17.940
67282
2020-06-04T09:23:17.940
9820
67275
answer