Oracle sql计算分区上的不同值?

Posted

技术标签:

【中文标题】Oracle sql计算分区上的不同值?【英文标题】:Oracle sql Count distinct value over partition by? 【发布时间】:2017-10-12 20:19:54 【问题描述】:

抱歉,我很困惑,无法让它工作。

我想为每个项目显示最大数量的相同值,

我的意思是:- 我有 70 个托盘的物品,物品 A 每个托盘都有一个唯一的 tag_id 每个 tag_id 上都有一个数量 (qty_on_hand) 大多数时候这个 qty_on_hand 对于很多托盘都是一样的,所以对于我的 70 个托盘,我有 34 个标签,qty_on_hand 为 60 6 个标签,qty_on_hand 为 88 30 个标签,qty_on_hand 为 80

我想显示商品编号和标签的最高编号, 上面的例子是 Item A 34

但我需要为仓库中的数千件物品执行此操作。 我可以做一个简单的 选择 i.qty_on_hand,count(qty_on_hand) 从库存 i 其中 i.zone_1 = 'BULKSTORE' 和 sku_id = '1961834100' 按 qty_on_hand 分组 但它是针对 1 件商品 (sku_id) 的,然后这仍然向我表明,在散装商店区域中有 3 个不同的数量_on_hand,我只希望每个 sku 的数量最高。

我查看了按等计算不同的分区,等等, 但无法让它工作,所以任何工作示例都会很棒。

希望我没有让你太困惑。 提前致谢 院长

【问题讨论】:

zone 与问题有什么关系?那么:count distinct 不太可能有帮助;你想算等于,这是一个不同的概念。 【参考方案1】:

样本数据,所以我们谈论的是同一件事,会有所帮助。

假设“item”由sku_id标识,每个托盘都有一个唯一的tag_id,它有一个sku_id和一个qty(数量)。并且该表称为t

然后类似

select sku_id, qty
from   ( 
         select   sku_id, qty,
                  dense_rank() over (partition by sku_id order by count(*) desc) as drk
         from     t
         group by sku_id, qty
       )
where  drk = 1
;

会给你你需要的。

【讨论】:

以上是关于Oracle sql计算分区上的不同值?的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 计算不同列上的重复次数

计算不同单词在列中出现的次数 Oracle 12c SQL

Oracle SQL:使用前一行计算值

Oracle SQL - 过滤掉包含具有特定值的行的分区或行组

SQL:计算每个设备集连续出现相同值的所有记录并返回最高计数

如果第二列值在SQL中不相同,则计算一列中的不同值