当前位置: 首页 > 面试题库 >

如何从Oracle SQL的几列中选择唯一值?

谷翰飞
2023-03-14
问题内容

基本上,我有下表:

ID | Amount
AA | 10
AA | 20
BB | 30
BB | 40
CC | 10
CC | 50
DD | 20
DD | 60
EE | 30
EE | 70

我需要在每个列中获得唯一的条目,如以下示例所示:

ID | Amount
AA | 10
BB | 30
CC | 50
DD | 60
EE | 70

到目前为止,以下代码片段几乎提供了我想要的内容,但first_value()可能会返回一些值,这在当前列中不是唯一的:

first_value(Amount) over (partition by ID)

Distinct 也无济于事,因为它返回唯一的行,而不是其值

编辑: 选择顺序无关紧要


问题答案:

即使使用Dimitri提到的有问题的组合,这也对我有用。我不知道这对于大音量有多快

with ids as (
  select id, row_number() over (order by id) as rn
  from data
  group by id
), amounts as (
  select amount, row_number() over (order by amount) as rn
  from data
  group by amount
)
select i.id, a.amount
from ids i
  join amounts a on i.rn = a.rn;

SQLFiddle当前不适用于我,这是我的测试脚本:

create table data (id varchar(10), amount integer);

insert into data values ('AA',10);
insert into data values ('AA',20);
insert into data values ('BB',30);
insert into data values ('BB',40);
insert into data values ('CC',10);
insert into data values ('CC',50);
insert into data values ('DD',20);
insert into data values ('DD',60);
insert into data values ('EE',30);
insert into data values ('EE',70);

输出:

id | amount
---+-------
AA |     10
BB |     20
CC |     30
DD |     40
EE |     50


 类似资料:
  • 问题内容: 假设我有一张桌子: 我需要获取仅提及一次的名称(在本例中为:乍得和蒂姆)。查询的是什么?谢谢。 问题答案: 您可以使用: Rextester演示

  • 问题内容: 我有一个MySQL表,其中包含以下类型的信息: 这是我用来从该表获取数据的脚本示例: 该脚本显示表格中的每个日期,例如 我只想显示唯一的日期,例如 问题答案: 在MySQL中使用DISTINCT运算符:

  • 我有一个大约15万行的表,我必须使用JavaQuartz Scheduler一次获取1000行。要求是一次限制1000行,然后再限制1000行等(与MySQL限制查询相同)。 我正在使用以下查询: 问题是上面的查询返回了我在结果集中不需要的额外列rownum,因为返回的数据被传递给MapListHandler(),后者返回将结果转换为JSON,并且我将此JSON传递给不期望额外rownum列的We

  • 问题内容: 我有下表,我必须从中获取非唯一行 我想获取column的所有行,至少在两行中具有相同的值。 上表查询的输出必须为 我尝试了以下请求,但均未成功: 问题答案: 尝试这个: 您发布的数据的结果:

  • 问题内容: 因此,我无法创建或编辑表(我是具有只读权限的用户),并且想查找10,000个唯一ID。我无法将它们放在IN()语句中,因为oracle限制了1000多个项目。 是否可以从oracle的DUAL表中选择整个列表?就像是: 问题答案: 使用集合(像条款一样,它们不限于1000个项目): 并且是在所提供的集合类型的架构。 您可以将其直接连接到要访问的任何表,而无需使用该表: 如果您可以创建一

  • 问题内容: 假设我有一个包含A列,B列和C列的表。如何编写查询以选择A列或B列或C列等于某个值的所有行?谢谢。 更新: 我想忘记提及我的困惑了。假设还有另一列(第1列),我需要根据以下逻辑进行选择: …其中Column1 =’..’AND(ColumnA =’..’OR ColumnB =’..’OR ColumnC =’..’) 像我上面用括号所做的那样对语句进行分组以获得所需的逻辑有效吗? 问