KingbaseES 中select distinct on 语句
用法
SELECT DISTINCT ON ( expression [, ...] )
把记录根据[, …]的值进行分组,分组之后仅返回每一组的第一行。
需要注意的是,如果不指定ORDER BY子句,返回的第一条记录是不确定的。如果你使用了ORDER BY 子句,那么[, …]里面的值必须靠近ORDER BY子句的最左边。
例子
构造数据
create table student(id serial,name character varying,course character varying,score integer);
insert into student (name,course,score) values('张三','语文',89);
insert into student (name,course,score) values('张三','数学',99);
insert into student (name,course,score) values('张三','外语',84);
insert into student (name,course,score) values('张三','物理',77);
insert into student (name,course,score) values('张三','化学',87);
insert into student (name,course,score) values('李四','语文',91);
insert into student (name,course,score) values('李四','数学',81);
insert into student (name,course,score) values('李四','外语',88);
insert into student (name,course,score) values('李四','物理',68);
insert into student (name,course,score) values('李四','化学',83);
insert into student (name,course,score) values('王五','语文',85);
insert into student (name,course,score) values('王五','数学',65);
insert into student (name,course,score) values('王五','外语',95);
insert into student (name,course,score) values('王五','物理',90);
insert into student (name,course,score) values('王五','化学',78);
1.当没用指定order by子句的时候随机返回一行。
test=# select distinct on(course)id,name,course,score from student;
id | name | course | score
----+------+--------+-------
10 | 李四 | 化学 | 83
7 | 李四 | 数学 | 81
8 | 李四 | 外语 | 88
4 | 张三 | 物理 | 77
1 | 张三 | 语文 | 89
(5 行记录)
2.使用order by子句获取每门学科最高/最低分。
test=# select distinct on(course)id,name,course,score from student order by course,score;
id | name | course | score
----+------+--------+-------
15 | 王五 | 化学 | 78
12 | 王五 | 数学 | 65
3 | 张三 | 外语 | 84
9 | 李四 | 物理 | 68
11 | 王五 | 语文 | 85
(5 行记录)
test=# select distinct on(course)id,name,course,score from student order by course,score desc;
id | name | course | score
----+------+--------+-------
5 | 张三 | 化学 | 87
2 | 张三 | 数学 | 99
13 | 王五 | 外语 | 95
14 | 王五 | 物理 | 90
6 | 李四 | 语文 | 91
(5 行记录)
- 如果指定order by子句必须把分组的字段放在最左边
test=# select distinct on(course)id,name,course,score from student order by score desc,course;
错误: 表达式SELECT DISTINCT ON必须匹配初始化的ORDER BY表达式
第1行select distinct on(course)id,name,course,score from student ...
KINGBASE研究院
分类:
SQL
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!