首页 / 知识
关于sql:如何(或可以)在多列上选择DISTINCT?
2023-04-14 20:23:00

How do I (or can I) SELECT DISTINCT on multiple columns?我需要从合并了2列的表中检索所有行。 因此,我希望所有在同一天以相同价格进行的销售都没有其他销售。 基于日期和价格的唯一销售将更新为活动状态。 所以我在想:
但是我的大脑比这更痛。
大致相当于:
习惯GROUP BY语法是一个好主意,因为它更强大。 对于您的查询,我会这样做:
如果将到目前为止的答案汇总在一起,进行清理和改进,您将得出以下高级查询:
这比任何一个都快得多。核对当前接受的答案的性能(系数为10-15)(在PostgreSQL 8.4和9.1上的测试中)。
但这仍然远非最佳。使用
db <>在这里拨弄 识别行的唯一键
如果您没有该表的主键或唯一键(在示例中为
每个表都应有一个主键。如果还没有,请添加一个。我建议在Postgres 10+中使用 有关:
怎么更快?
一旦找到第一个重复对象, 排除空白更新
对于已经具有
如果将
NULL处理的细微差别
此查询(与Joel当前接受的答案不同)不会将NULL值视为相等。
还传递唯一索引和几乎其他任何地方,因为NULL值根据SQL标准不等于相等。看到:
OTOH,
如果所有要比较的列均定义为 查询的问题在于,当使用GROUP BY子句时(本质上是通过使用distinct来完成的),您只能使用按功能分组或聚合功能的列。您不能使用列ID,因为可能存在不同的值。在您的情况下,由于HAVING子句,始终只有一个值,但是大多数RDBMS不够聪明,无法识别该值。 但是,这应该可以工作(并且不需要联接):
您也可以使用MAX或AVG代替MIN,只有只有一个匹配的行时,使用返回列值的函数才是重要的。 我想从" GrondOfLucht"列中选择不同的值,但是应该按照"排序"列中给出的顺序对它们进行排序。我无法使用仅获得一列的不同值
它还将给列"排序",并且因为" GrondOfLucht"和"排序"不是唯一的,所以结果将是所有行。 使用"组"以"排序"给定的顺序选择" GrondOfLucht"的记录
如果您的DBMS不支持像这样的多个列,则:
通常,可以安全执行多重选择,如下所示:
因为这可以在大多数DBMS上使用,并且由于避免了分组功能,所以预计它比按解决方案分组要快。 |
最新内容
相关内容
linux文件夹合并命令?
linux文件夹合并命令?,文件,对比,第一,下来,命令,文件夹,两个,字段,内容,数组,在linux下我有两个文件夹w1,w2,怎样把它们合并到一个文件夹1、使用linux命令合并?
使用linux命令合并?,文件,代码,工作,命令,内容,两个,目录,方法,麻烦事,发现,linux切分文件命令(split)和合并文件1、[root@localhost databaselinux分区合并命令行?
linux分区合并命令行?,系统,管理,地址,电脑,名字,工具,数据,工作,分区,地方,请问,linux如何合并分区?可以试试Acronis Disk,这个软件在windowslinux检索文件命令?
linux检索文件命令?,系统,工作,信息,数据,名称,文件,命令,管理,情况,标准,linux中查看文件和目录的命令是什么在Linux系统中,使用ls命令可以查合并文件的linux命令?
合并文件的linux命令?,文件,代码,位置,系统,命令,内容,两个,文件夹,链接,方法,linux中怎么将文件合并方法一:使用cat命令从文件中读入两个文件,linux命令检索模板?
linux命令检索模板?,时间,档案,系统,命令,名称,灵活,工具,文件,工作,环境,Linux下find命令和grep命令查找文件locate命令 locate命令是另一种linux合并命令是什么?
linux合并命令是什么?,文件,代码,位置,系统,命令,两个,内容,文件夹,链接,功能,Linux怎么用命令合并多个文件为一个1、将两个文件filetxt和filelinux数据库选择命令?
linux数据库选择命令?,系统,地址,工作,软件,管理,信息,工具,基础,命令,服务,操作系统常用命令和linux常用命令怎么学首先打开linux操作系统在学编程为什么选择Python
学编程为什么选择Python,数据,人工智能,标准,代码,发展,工资,占比,项目,待遇,培训,人工智能的飞速发展推动使用Python编程语言的人越来越多,Pypython如何选择Python中的IDE?
python如何选择Python中的IDE?,工具,代码,平台,通用,培训,实时,最新,智能,工作,环境,在写Python代码时,最好的方式就是使用集成开发环境了,也就报名Python培训选择哪种方式比较好
报名Python培训选择哪种方式比较好?,培训,工作,基础,时间,情况,在线,最划算,环境,系统,方式,Python不仅是一种高级的编程语言,而且还是一种应用Python列表类型list合并有哪些方法
Python列表类型list合并有哪些方法?,培训,方法,列表,可能会,数组,切片,下文,字符串,数据类型,请看,在Python编程语言中,有各种数据类型,比如字符