2012-04-08 48 views
1

這並不在Postgres的8.4工作:SQL錯誤/低

SELECT DISTINCT col1 FROM mytable 
    ORDER BY UPPER(col1); 

但這個工程:

SELECT DISTINCT col1 FROM mytable 
    ORDER BY col1; 

我知道這可能是數據庫有點混亂是先應用DISTINCT再用UPPER還是首先應用UPPER然後應用DISTINCT。根據訂單如何應用,可能會得到不同的結果。不確定SQL標準在這方面是否有任何說明。

任何幫助將不勝感激。

+0

你收到了什麼錯誤信息?如果這是我的想法,你可能可以使用這個查詢 - SELECT DISTINCT UPPER(col1),col1 FROM mytable ORDER BY UPPER(col1); – 2012-04-08 14:30:36

+0

我得到的錯誤是:錯誤:對於SELECT DISTINCT,ORDER BY表達式必須出現在選擇列表中 – user1318538 2012-04-08 20:48:27

+0

但您的解決方案工作!謝謝。 – user1318538 2012-04-08 20:49:10

回答

3

許多SQL引擎只允許您對正在選擇的列進行排序。所以修正將UPPER(col1)添加到select。

SELECT DISTINCT UPPER(col1), col1 FROM mytable ORDER BY UPPER(col1) 
+1

['DISTINCT'子句](http://www.postgresql.org/docs/current/interactive/sql-select.html#SQL-DISTINCT)和'ORDER BY'必須同意**最左邊的**列。在許多情況下添加* additional *'ORDER BY'列是很好用的。 – 2012-04-09 21:22:31

0

在同樣的問題,只是迷迷糊糊地在我的特殊背景下,以下是簡單的來實現:

select * from (select distinct col1 from mytable) x order by upper(col1) 

我沒有刻意做任何性能測試(在我的情況下,數據量相當低),但這可能甚至可能會提高速度,因爲排序可能發生在少得多的數據上(Postgres doc說排序在應用DISTINCT之前發生,而上面我們先DISTINCT,然後排序)。