首页 > 数据库 >postgresql distinct on用法

postgresql distinct on用法

时间:2024-01-10 10:16:11浏览次数:36  
标签:postgresql lightdb distinct distincton 用法 oradb id select

除了我们熟知的distinct外,postgresql还支持distinct on,它的用途跟mysql没有启用ONLY_FULL_GROUP_BY SQL选项是一样的,针对声明的字段做分组,分组外的字段返回随机一行。如下:

lightdb@oradb=# create table t_distincton(id int,v text);
CREATE TABLE
lightdb@oradb=# 
lightdb@oradb=# 
lightdb@oradb=# insert into t_distincton values (1,'v1'),(2,'v2'),(3,'v3');
INSERT 0 3
lightdb@oradb=# insert into t_distincton values (1,'v1'),(2,'v2'),(3,'v4');
INSERT 0 3
lightdb@oradb=# select * from t_distincton ;
 id | v  
----+----
  1 | v1
  2 | v2
  3 | v3
  1 | v1
  2 | v2
  3 | v4
(6 rows)

lightdb@oradb=# select distinct on(id) v from t_distincton ;
 v  
----
 v1
 v2
 v3
(3 rows)

lightdb@oradb=# select distinct on(v) id,v from t_distincton ;
 id | v  
----+----
  1 | v1
  2 | v2
  3 | v3
  3 | v4
(4 rows)

lightdb@oradb=# select distinct on(v) id,v from t_distincton order by id;
ERROR:  SELECT DISTINCT ON expressions must match initial ORDER BY expressions
LINE 1: select distinct on(v) id,v from t_distincton order by id;
                           ^
lightdb@oradb=# select distinct on(v) id,v from t_distincton order by v,id;
 id | v  
----+----
  1 | v1
  2 | v2
  3 | v3
  3 | v4
(4 rows)

lightdb@oradb=# select distinct on(v,id) id,v from t_distincton order by v;
 id | v  
----+----
  1 | v1
  2 | v2
  3 | v3
  3 | v4
(4 rows)

如果不使用distinct on,也可以通过分析函数row_number()达到相同的效果,如下:

select from (select row_number() over (partition by a) as rn, * from t_distinct) t where rn=1; 

需要注意的是,如果有distinct on(a,b,c)的值有null,null被认为都相同,这个null != null不一样。

标签:postgresql,lightdb,distinct,distincton,用法,oradb,id,select
From: https://www.cnblogs.com/lightdb/p/17955892

相关文章

  • PGSQL(PostgreSQL)数据库基础篇:PostgreSQL 的 主要优点 、 劣势 、体系结构 、核心功
    PostgreSQL的主要优点1.维护者是PostgreSQLGlobalDevelopmentGroup,首次发布于1989年6月。2.操作系统支持WINDOWS、Linux、UNIX、MACOSX、BSD。3.从基本功能上来看,支持ACID、关联完整性、数据库事务、Unicode多国语言。4.表和视图方面,PostgreSQL支持临时表,而物化视图,可以......
  • postgresql使用sql封装邮箱发送功能
    “ postgresql数据库支持python语言,同样可以封装一下python的邮件发送功能。        本文假设数据库中存有职员的花名册,对花名册进行遍历发送邮件。”01—数据库安装安装依赖yuminstall-ybisonflexreadline-develzlib-develzlibzlib-develgccgcc-c++openssl-d......
  • 在postgresql中用SQL封装python
    “ 对于一个数据库来说,SQL大家肯定最熟悉不过了。但是作为数据库开发者,我认为数据库不应该只是支持SQL语言。应该支持更多编程语言。比如python、java、c++等更多编程语言,让数据库在多种语言之间的管理、功能上实现最大便捷,这才是未来数据库最大的发展趋势。也是国产数据库在实现......
  • 字符串和哈希表的基本用法总结
    2287.重排字符形成目标字符串解决代码classSolution{publicintrearrangeCharacters(Strings,Stringtarget){Map<Character,Integer>sCounts=newHashMap<Character,Integer>();Map<Character,Integer>targetCounts=newHashMap&......
  • PHP的array_column()函数用法详解
    在PHP中,经常需要对数组进行处理和操作。有时候,需要从一个多维数组中获取特定的一列数据,这时候就可以使用array_column()函数来实现。本文将详细介绍array_column()函数的用法。一、什么是array_column()函数array_column()是一个PHP函数,用于从一个多维数组中获取指定的一列数据。该......
  • TDSQL(PostgreSQL版本) benchmark性能测试
    一、准备软件包jdk:地址:https://pan.baidu.com/s/1sbgLPROfd9e_valSfv0YAQ提取码:4qpsbenchmark:地址:https://pan.baidu.com/s/1nAHER-BXpgG0LUnR8NbT7Q提取码:xcbu二、安装1、jdk安装:1.1解压安装到34机器的/data/tbase/jdk目录下1.2配置环境变量如下:[tbase@VM_0_37_cent......
  • PostgreSQL 数据库归档最近被问及的问题问题 与 4 毋 处世学
    还是老规矩,技术加生活,先说技术,后说生活的感悟和人生的学习。在PostgreSQL中很少被提及的一个问题,归档,而这里经常有人问这个问题,所以需要写一期来说说关于ARCHIVE的问题。首先我们需要提出几个问题,1为什么要归档,PG中归档了什么2 什么时间进行归档,归档的原理与频率3  要怎么在......
  • C#中ref关键字的用法总结
    ref表示引用的意思,C#中它有多种用法,这里简单总结一下:1、按引用传递参数2、引用局部变量引用局部变量指的是在变量声明时使用ref关键字(或者使用refreadonly表示未只读),表示这个变量是另一个变量的引用,而不是值对象的赋值,或者引用类型的地址,这个引用可以理解为一个别名,操......
  • console的高级用法,console.log带颜色的字
    先展示效果图:代码如下: <!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"conte......
  • QProgressDialog用法及结合QThread用法,四种线程使用
    1QProgressDialog概述QProgressDialog类提供耗时操作的进度条。进度对话框用于向用户指示操作将花费多长时间,并演示应用程序没有冻结。此外,QPorgressDialog还可以给用户一个中止操作的机会。进度对话框的一个常见问题是很难知道何时使用它们;操作在不同的硬件上花费不同的时间......