首页 > 解决方案 > 在 Postgres 上如何对具有特定条件的行进行优先级排序?

问题描述

我以这张表为例:

CREATE TABLE "public"."items" (
    "name" text NOT NULL,
    "type" text NOT NULL
)

带有初始值:

INSERT INTO "items" ("name", "type") VALUES
('apple',   'fruit'),
('banana',  'fruit'),
('chair',   'furniture'),
('table',   'furniture'),
('grape',   'fruit'),
('cabbage', 'vegetable'),
('beef',    'meat'),
('water',   'drinks'),
('lamp',    'furniture');

如何使用一条语句从该表中查询行,以便fruit首先获取具有类型的行?

鉴于:

例如,如果我想从该表中查询 5 行,结果将是'apple', 'banana', 'grape', 'cabbage' and 'beef'.

标签: sqlpostgresqloptimization

解决方案


您可以使用布尔表达式作为第一个ORDER BY表达式:


SELECT * FROM items
ORDER BY (type='fruit') DESC, name
   ;

推荐阅读