这在postgres 8.4中不起作用:
SELECT DISTINCT col1 FROM mytable
ORDER BY UPPER(col1);
但这有效:
SELECT DISTINCT col1 FROM mytable
ORDER BY col1;
我知道数据库是否先应用DISTINCT然后UPPER或首先转换为UPPER然后应用DISTINCT可能有点令人困惑。根据订单如何应用,可能会得到不同的结果。不确定SQL标准是否在这方面说了什么。
任何帮助都将受到高度赞赏。
答案 0 :(得分:3)
许多SQL引擎只允许您对正在选择的列进行排序。因此修复了将UPPER(col1)添加到选择。
SELECT DISTINCT UPPER(col1), col1 FROM mytable ORDER BY UPPER(col1)
答案 1 :(得分:0)
偶然发现了同样的问题,在我的特定情况下,以下内容更容易实现:
select * from (select distinct col1 from mytable) x order by upper(col1)
我没有打扰进行任何性能测试(在我的情况下,数据量相当低),但这可能甚至可以提高速度,因为排序可能发生在显着更少的数据上(Postgres doc说在排序之前发生了排序,DISTINCT,而上面的方式我们先DISTINCT,然后排序)。