用法

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 行记录)
  1. 如果指定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 ...

KingbaseES 中select distinct on 语句的更多相关文章

  1. mysql中select distinct的用法

    在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但 往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的 ...

  2. mysql中select distinct的使用方法

    在使用mysql时,有时须要查询出某个字段不反复的记录,尽管mysql提供有distinct这个keyword来过滤掉多余的反复记录仅仅保留一条,但往往仅仅用它来返回不反复记录的条数,而不是用它来返回 ...

  3. 数据库中Select For update语句的解析

    ----------- Oracle -----------------– Oracle 的for update行锁 键字: oracle 的for update行锁 SELECT-FOR UPDAT ...

  4. SQL中的多表联查(SELECT DISTINCT 语句)

    前言:(在表中,可能会包含重复值.这并不成问题,不过,有时你也许希望仅仅列出不同(distinct)的值. 关键词 DISTINCT 用于返回唯一不同的值.) 如果不加DISTINCT 的话,主表本来 ...

  5. LINQ to SQL语句(2)之Select/Distinct

    适用场景:o(∩_∩)o- 查询呗. 说明:和SQL命令中的select作用相似但位置不同,查询表达式中的select及所接子句是放在表达式最后并把子句中的变量也就是结果返回回来:延迟.Select/ ...

  6. 容易被忽略的事----sql语句中select语句的执行顺序

    关于Sql中Select语句的执行顺序,一直很少注意这个问题,对于关键字的使用也很随意,至于效率问题,因为表中的数据量都不是很大,所以也不是很在意. 今天在一次面试的时候自己见到了,感觉没一点的印象, ...

  7. LINQ to SQL 语句(2)之 Select/Distinct

    LINQ to SQL 语句(2)之 Select/Distinct [1] Select 介绍 1 [2] Select 介绍 2 [3] Select 介绍 3 和  Distinct 介绍 Se ...

  8. [转]LINQ语句之Select/Distinct和Count/Sum/Min/Max/Avg

    在讲述了LINQ,顺便说了一下Where操作,这篇开始我们继续说LINQ语句,目的让大家从语句的角度了解LINQ,LINQ包括LINQ to Objects.LINQ to DataSets.LINQ ...

  9. SQL SELECT DISTINCT 语句

    SQL SELECT DISTINCT 语句 在表中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值. 关键词 DISTINCT 用于返回唯一不同的值. 语法 ...

随机推荐

  1. js与java encodeURI 进行编码与解码

    JS escape()使用转义序列替换某些字符来对字符串进行编码  JavaScript 中国 编码后 JavaScript %u4E2D%u56FD unescape()对使用   encodeUR ...

  2. 到点了开始网抑云(悲)但是用python(整活)

    写在前面的一点网抑云: 爱情不是随便许诺好了不想再说了没错 是我那么多的冷漠 让你感觉到无比的寂寞不过 一个女人的不仅仅渴望得到的一个承诺我害怕欺骗也害怕寂寞更害怕我的心会渐渐地凋落爱情不是随便许诺好 ...

  3. Tapdata 等40余家行业知名企业,应邀参与共建 NextArch Foundation

      日前,Linux 基金会执行董事 Jim Zemlin 于 Linux 基金会会员峰会(The Linux Foundation Member Summit)上宣布,Linux 基金会正式成立 N ...

  4. 静态同步方法和解决线程安全问题_Lock锁

    静态的同步方法锁对象是谁?不能是thisthis是创建对象之后产生的,静态方法优先于对象静态方法的锁对象是本类的cLass属性-->class文件对象(反射) 卖票案例出现了线程安全问题 卖出了 ...

  5. gerrit系统如何配置访问控制

    . 版本:v0.3 作者:河东西望 日期:2022-7-13 . 目录 1 关键概念 2 需求场景 3 配置策略 gerrit系统的上手使用有两个难点: 部署repo仓库. 配置访问控制. 想要上手使 ...

  6. AI写代码! 神器copilot介绍+安装+使用

    !郑重提示!!!!!!!: 正在学编程.算法的同学请千万不要依赖此插件,否则你可能甚至无法手写出一个for循环 AI帮我写代码?我帮AI写代码?庄周梦蝶?蝶梦庄周?十分梦幻. copilot在VSco ...

  7. Spring知识点详解

    1.Spring 概述 1.1.Spring 的概念和特点 Spring 是一个轻量级的控制反转(IoC)和面向切面(AOP)的开源容器框架,它是由 Rod Johnson(音乐学博士)所创建,其核心 ...

  8. 2022-7-14 java_2 第七组 刘昀航

    @ 目录 一.java约定规范 1.关于建包 2.控制台输入(Scanner) 关于Scanner的bug 计算器小练习: 二. 1.数组 建立数组的三种方式: 数据类型的初始值: 2.二维数组 使用 ...

  9. CF576A Vasya and Petya's Game

    题目大意: 给定一个数字 n,现在 Vasya 要从 1∼n 中想一个数字 x. Petya 向 Vasya 询问 "x 是否能整除 y?" ,通过 Vasya 的回答来判断 x ...

  10. 非root用户安装科学计算包blas、lapack和FFTW

    一.安装FFTW 1.下载安装包 下载地址:http://www.fftw.org/download.html  2.编译安装 tar -zxvf fftw-3.3.10.tar.gz cd fftw ...