gpt4 book ai didi

sql - Oracle - 来自单个列的唯一值,但返回其他列

转载 作者:行者123 更新时间:2023-12-02 06:43:06 24 4
gpt4 key购买 nike

我正在尝试弄清楚如何从表列中提取选择值,但同时返回其他结果。例如说我有下表

person  ..........
------------------
bob ..........
mary ..........
bob ..........
sue ..........

我要返回的是

bob     ..........
mary ..........
sue ..........

在这种情况下,我不关心我实际上从其他列接收到的 bob 的值是什么,我该怎么做呢?


跟进问题,如果我确实关心怎么办?如果我有这张 table 会怎样

person  type    color   ..........
----------------------------------
bob 0 blue ..........
mary 1 green ..........
bob 1 red ..........
sue 0 yellow ..........

这一次我再次想要独特的人,但是当他的类型为 0 时我想要返回 bob 的结果,所以对于他我会看到

bob     0   blue    ..........
mary 1 green ..........
sue 0 yellow ..........

谢谢!

最佳答案

您可以使用 analytic functions比如 RANK 来描述你想保留哪一行的算法,然后做一些类似的事情

SELECT *
FROM (SELECT person,
type,
color,
RANK() OVER( PARTITION BY person
ORDER BY type asc ) rnk
FROM <<person_table>>)
WHERE rnk = 1

这将为每个人返回“第一”行,其中“第一”由具有最低 TYPE 值的行确定。

当您开始查看排名行时,需要注意的一件事是存在三种不同的分析函数——RANK、DENSE_RANK 和 ROW_NUMBER——它们基本上做同样的事情,但处理关系的方式不同。 RANK 是标准的田径排名函数——如果有两行并列第一(即 PERSON='bob' 和 TYPE=0 的两行),他们将获得排名 1而下一行将获得 3 的排名,因此不会有“第二名”行。在相同的情况下,DENSE_RANK 也会给两个并列行排名 1,但会给下一行排名 2。ROW_NUMBER 会任意给其中一个并列行排名 1,给另一行排名 2,并将第三行的排名设为 3。当然,您可以通过向 ORDER BY 子句添加额外的列来打破平局。

关于sql - Oracle - 来自单个列的唯一值,但返回其他列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4891143/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com