PostgreSQL:JOIN SELECT 和 ORDER 隐藏

Posted

技术标签:

【中文标题】PostgreSQL:JOIN SELECT 和 ORDER 隐藏【英文标题】:PostgreSQ: JOIN SELECT and ORDER hidden 【发布时间】:2020-07-02 17:02:16 【问题描述】:

数据库表“myTable”具有字段“category”;

SELECT DISTINCT "category" FROM "myTable" ORDER BY "category" ASC;
   A-Class
   T-Class
   Z-Class

好的,现在我必须添加一行“未定义”,例如

SELECT DISTINCT "category" FROM "myTable"  
UNION SELECT '>undefined<' 
ORDER BY "category" ASC;
   A-Class
   T-Class
   >undefined<
   Z-Class

我需要“未定义”作为列表中的第一个条目,并尝试了几个字符,例如 .,-_!首先,但所有内容都被忽略,并以 u 为顺序。

是否有任何简单的选项来实现这一点,而不在查询中显示第二列?

【问题讨论】:

【参考方案1】:

只需使用子查询或 CTE:

with sortme as (
  select distinct category, category as category_sort 
    from "myTable"
  union 
  select 'undefined', ''
)
select category
  from sortme
 order by category_sort;

【讨论】:

谢谢你,完美!!【参考方案2】:

你可以输入

order by case "category" when 'undefined' then 1 else 0 end, "category";

undefined之前加上&gt;等特殊字符,你也可以cast category to bytea or use explicit collation。

【讨论】:

谢谢,逐案排序是一个很好的建议,而且更短。不幸的是,在我的某些情况下,要排序的文本是另一个表的子选择,我无法让它与联盟。

以上是关于PostgreSQL:JOIN SELECT 和 ORDER 隐藏的主要内容,如果未能解决你的问题,请参考以下文章

postgresql----JOIN之多表查询

PostgreSQL JOIN没有匹配的NULL值

Oracle 在字符串上的 OUTER JOIN (+) - 迁移 PostgreSQL

PostgreSQL 查询到 JOIN 和 SUM

INNER JOIN 与 h2 数据库和 postgresql 数据库的区别

使用 INNER JOIN LATERAL 和 postgresql 将宽表转换为长表