1

这在 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 标准在这方面是否有任何说明。

任何帮助将不胜感激。

4

2 回答 2

4

许多 SQL 引擎只允许您对正在选择的列进行排序。所以修复将 UPPER(col1) 添加到选择中。

SELECT DISTINCT UPPER(col1), col1 FROM mytable ORDER BY UPPER(col1)
于 2012-04-09T21:13:39.340 回答
0

只是偶然发现了同样的问题,在我的特定上下文中,以下实现起来更简单:

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

我没有费心进行任何性能测试(在我的情况下,数据量相当低),但这可能甚至可以提高速度,因为排序可能发生在明显更少的数据上(Postgres 文档说排序发生在应用 DISTINCT 之前,而方式上面我们先DISTINCT,然后排序)。

于 2014-10-23T12:27:07.823 回答