簡體   English   中英

如何在PostgreSQL中進行DISTINCT和ORDER BY?

[英]How do I do a DISTINCT and ORDER BY in PostgreSQL?

PostgreSQL將使我猛擊小動物。 我正在針對MySQL執行以下SQL語句,以獲取唯一的城市/州/國家/地區列表。

SELECT DISTINCT city
              , state
              , country 
           FROM events 
          WHERE (city > '') 
            AND (number_id = 123)  
       ORDER BY occured_at ASC

但是這樣做會使PostgreSQL拋出此錯誤:

PGError:錯誤:對於SELECT DISTINCT,ORDER BY表達式必須出現在選擇列表中

但是,如果我在SELECT中添加了extended_at,那么殺死返回唯一列表的行為就很致命。

使用MySQL和第一個查詢的結果:

BEDFORD PARK       IL   US
ADDISON         IL  US
HOUSTON         TX  US

如果將SELECTED_AT添加到SELECT中,結果:

BEDFORD PARK       IL   US  2009-11-02 19:10:00
BEDFORD PARK       IL   US  2009-11-02 21:40:00
ADDISON         IL  US  2009-11-02 22:37:00
ADDISON         IL  US  2009-11-03 00:22:00
ADDISON         IL  US  2009-11-03 01:35:00
HOUSTON         TX  US  2009-11-03 01:36:00

第一組結果是我最終嘗試使用PostgreSQL獲得的結果。

好吧,您希望Postgres如何確定在創建排序順序時使用哪個existed_at值?

我不特別了解Postgres語法,但是您可以嘗試:

SELECT DISTINCT city, state, country, MAX(occured_at)
       FROM events 
      WHERE (city > '') AND (number_id = 123) ORDER BY MAX(occured_at) ASC

要么

SELECT city, state, country, MAX(occured_at)
       FROM events 
      WHERE (city > '') AND (number_id = 123) 
      GROUP BY city, state, country ORDER BY MAX(occured_at) ASC

假設您希望按最近發生的結果排序結果。 如果要第一次出現,請將MAX更改為MIN。

順便說一句,您的標題詢問了GROUP BY,但是您的語法指定了DISTINCT。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM