[英]PostgreSQL, distinct, order by and parentheses
我有以下要求:
select distinct m1.firstname, m1.surname
from cd.members as m1
join cd.members as m2 on m2.recommendedby = m1.memid
order by m1.surname, m1.firstname;
而且效果很好。 但是這個:
select distinct m1.firstname, m1.surname
from cd.members as m1
join cd.members as m2 on m2.recommendedby = m1.memid
order by (m1.surname, m1.firstname);
給我錯誤:
ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list
我不明白什么時候必須使用括號,什么時候不用。
Postgres具有元組或復合類型的概念。 這些是標量值,它們一起出現-很像許多編程語言中的記錄或結構。
您可以將元組用於表達式,例如:
where (m1.surname, m1.firstname) in ( ('a', 'b'), ('x', 'y') )
您order by
表達式order by
問題是元組不在select
。 您也可以在此處使用括號來解決此問題:
select distinct (m1.firstname, m1.surname)
from cd.members m1 join
cd.members m2
on m2.recommendedby = m1.memid
order by (m1.surname, m1.firstname);
但是我會堅持使用無括號的版本,該版本是標准SQL,適用於所有數據庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.