在Postgres上选择Distinct(不区分大小写)



这个问题已经在这里和其他一些地方被问到,但似乎建议的答案要么不适用于postgres,要么在这种情况下不起作用。

我正在寻找选择不同的列名,例如:

SELECT DISTINCT column_name FROM table_name WHERE ... ORDER BY column_name然而,我希望消除大小写敏感的重复(例如Aa应被认为是同一件事)

我尝试了COLLATE,但所有可用的格式都是区分大小写的。通过LOWER()UPPER()改变大小写是行不通的,因为在这种情况下,我需要大小写信息。

我想过这样的东西来获取唯一的值,但仍然保持这种情况:

SELECT DISTINCT upper(my_column) as upper_case, my_column
FROM my_table
ORDER BY upper(my_column)

但是在distinct查询中引入my_column会否定整个东西。

如何在不修改结果本身的情况下获得唯一值(不区分大小写)?

在PostgreSQL(但不是很多其他数据库)中,您可以使用DISTINCT ON子句:

SELECT DISTINCT ON (upper(my_column)) my_column
FROM my_table
ORDER BY upper(my_column)

您甚至可以选择得到哪个结果,通过在ORDER by子句中添加另一列来使期望的结果首先出现:

SELECT DISTINCT ON (upper(my_column)) my_column
FROM my_table
ORDER BY upper(my_column), other_column

Documentation: DISTINCT Clause

您可以使用聚合函数:

SELECT MAX(my_column)
FROM my_table
GROUP BY upper(my_column);

返回一个值。如果你想要所有的值:

SELECT ARRAY_AGG(DISTINCT my_column)
FROM my_table
GROUP BY upper(my_column);

相关内容

  • 没有找到相关文章

最新更新