首页 > 解决方案 > 从 2 个常见行中获取唯一值

问题描述

有 2 行,其中一列具有唯一值,而 2 列具有非唯一值,因为得到 2 行,如果我在第一列中具有唯一值,我需要一行

91285   X2
87681   X1
91285   C2
87682   X4

预期结果

91285   X2
87681   X1
87682   X4

或者

91285   C2
87681   X1
87682   X4

我尝试通过在 oracle 中进行分区来获得预期的结果,但是对于大量数据,CPU 急剧上升。有没有其他方法可以实现。

SELECT id, type, ROW_NUMBER() OVER (PARTITION BY id ORDER BY id DESC) AS rn
FROM temp;

标签: sqloracleperformancequery-optimization

解决方案


“CPU 在处理海量数据时急剧上升”

您需要对结果集进行排序以过滤掉那些不需要的行。该操作会消耗 CPU,如果结果集足够大,甚至可能消耗文件 I/O。工作需要做任何事情。

也许使用聚合函数会更有效:

select id
       , max(type) as type
from temp
group by id;

正如你的问题所问的,这里的 MAX() 会给你 X2 而不是 C2。如果您的实际业务逻辑更复杂,您可能需要不同的功能。

有一个复合索引temp(id,type)会很有用。


推荐阅读