当我按上/下使用不同的顺序时出现SQL错误

时间:2012-04-08 14:25:04

标签: sql postgresql

这在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标准是否在这方面说了什么。

任何帮助都将受到高度赞赏。

2 个答案:

答案 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,然后排序)。