sql - 从 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;
解决方案
“CPU 在处理海量数据时急剧上升”
您需要对结果集进行排序以过滤掉那些不需要的行。该操作会消耗 CPU,如果结果集足够大,甚至可能消耗文件 I/O。工作需要做任何事情。
也许使用聚合函数会更有效:
select id
, max(type) as type
from temp
group by id;
正如你的问题所问的,这里的 MAX() 会给你 X2 而不是 C2。如果您的实际业务逻辑更复杂,您可能需要不同的功能。
有一个复合索引temp(id,type)
会很有用。
推荐阅读
- linux - 如何使用 Gnuplot 4.6 和 AIX 7.2 修复:“无法打开日志文件 fit.log:”?
- javascript - Vue 条件 v-on 事件阻止修饰符
- php - 将图像上传到数据库时在 Laravel 6.0 中出现错误
- java - Satang api 私有 http requeat
- reactjs - Liferay 7.1 npm-react-module 本地化
- c# - 当服务器使用 WriteAsync 方法时,“响应流已经完成”
- python - 有人可以说明python名称修饰的过程吗?
- javascript - 如何使用 `destroyOnUnmount: false` 和 `forceUnregisterOnUnmount: false` 和 `enableReinitialize: true`
- symfony - 如何在存储库中找到当前用户?
- sql - sql server 查询的格式化