gpt4 book ai didi

sql - 一列上的 Oracle Distinct

转载 作者:行者123 更新时间:2023-12-01 12:29:07 26 4
gpt4 key购买 nike

我有以下方式的表结构:

ITEM  LOC  STATUS  QTY
001 RS1 A 10
001 JS1 I 20
110 RS1 A 4

我只想根据不同的 ITEM 检索结果,而不管这些值随附

所以结果应该是
ITEM   LOC   STATUS   QTY
001 JS1 A 10
110 RS1 A 4

怎么做 ?

最佳答案

这是 Top N per category problem in SQL 的一个特例,其中 N = 1 ,在这种情况下,一些更简单的解决方案可能适用:

标准的 SQL 解决方案

现有答案建议在派生表中使用 row_number(),这显然有效。但是 as I have explained in this article ,在大多数情况下使用 first_value() 会更直接。您的结果可以由这个查询产生:

SELECT DISTINCT
item,
first_value (loc) OVER (PARTITION BY item ORDER BY qty) loc,
first_value (status) OVER (PARTITION BY item ORDER BY qty) status,
first_value (qty) OVER (PARTITION BY item ORDER BY qty) qty,
FROM t
ORDER BY item

这是假设您想按 QTY 订购。如果需要其他排序,请替换 ORDER BY 子句。

这种方法适用于所有 RDBMS

Oracle 特定的解决方案

在 Oracle 中,您可以使用供应商特定的 FIRST 聚合函数,该函数使用以下语法
SELECT
item,
MAX (loc) KEEP (DENSE_RANK FIRST ORDER BY qty) loc,
MAX (status) KEEP (DENSE_RANK FIRST ORDER BY qty) status,
MAX (qty) KEEP (DENSE_RANK FIRST ORDER BY qty) qty,
FROM t
GROUP BY item
ORDER BY item

我已经看到这比基于窗口函数的方法表现更好,但请检查一下。

关于sql - 一列上的 Oracle Distinct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36179997/

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