sql >> データベース >  >> RDS >> PostgreSQL

PG ::Error:SELECT DISTINCT、ORDERBY式は選択リストに表示される必要があります

    これはかなり古い質問ですが、頭の中で小さな例を見て、PostgresがSELECT DISTINCT /ORDERBY列にこの一見奇妙な制限がある理由を理解するのに役立ちました。

    Rsvpテーブルに次のデータがあるとします。

     event_id |        start_time
    ----------+------------------------
        0     | Mar 17, 2013  12:00:00
        1     |  Jan 1, 1970  00:00:00
        1     | Aug 21, 2013  16:30:00
        2     |  Jun 9, 2012  08:45:00
    

    次に、それぞれのstart_times順に並べられた個別のevent_idのリストを取得します。しかし、1はどこにすべきですか 行く? 1つのタプルが1970年1月1日に開始するため、最初に来る必要がありますか、それとも2013年8月21日のために最後になる必要がありますか?

    データベースシステムはその決定を下すことができず、クエリの構文は、操作している可能性のある実際のデータに依存できないため(event_idを想定) は一意です)、SELECTからの列のみによる順序付けに制限されています 条項。

    実際の質問については、マシューの答えの代わりに、MINのような集計関数を使用することもできます。 またはMAX 並べ替え用:

      SELECT event_id
        FROM Rsvp
    GROUP BY event_id
    ORDER BY MIN(start_time)
    

    start_timeでの明示的なグループ化と集計 データベースが結果タプルの明確な順序を考え出すことを許可します。ただし、この場合は読みやすさが間違いなく問題になることに注意してください;)



    1. Oracleで数値データを含まない行を検索する

    2. PostgreSQLのデータベースにテキストデータをロードする方法はありますか?

    3. PostgreSQL 12:外部キーとパーティションテーブル

    4. Oracleのテーブルから偶数レコードを選択する方法は?