Db2

MAX 值的 DB2 SUM,單個表

  • July 9, 2019

我查看了許多提出和回答的問題,但似乎找不到我的答案,甚至將提供的答案混雜到我的查詢中 - 大多數情況下都會失敗,其餘的會提供垃圾結果。

請注意,這是針對 IBM DB2 v9.7 的! 不是SQL Server 或任何更新的東西。

我有一個包含準不同行的表,但沒有鍵。根據所有欄位,找到重複項的機率幾乎為零,並且重複的機率隨著查詢中選擇的欄位越少而增加。在這一點上,我基本上可以接受。欄位比下面列出的要多,我添加了一個鍵僅供參考…

偽查詢

select sum(max(NumImages)) from table where Source in ('A','B') and Event='190'

桌子

Key   ID    NumImages   Source    Event
1     1     4           A         190
2     1     -           -         247
3     1     2           B         190
4     1     -           -         134

5     2     7           C         190
6     2     2           A         190
7     2     1           B         190
8     2     5           A         190

9     3     5           A         190
10    3     -           -         247
11    3     -           -         134
12    3     -           -         815

13    4     2           A         190
14    4     9           A         247
15    4     5           B         190
16    4     4           B         134

參數

Source in ('A','B') 
Event = '190'
NumImages is not null

(*我認為前面的參數不會發生這種情況)

輸出

ID    Sum
1     6
2     6
3     5
4     7

因為:

  • 1 = 6; 鍵 1 和 3 對於事件 190 和源 A 或 B 都是最大值
  • 2 = 6; 鍵 8(5 - 事件 190 源 A 的最大值)+ 鍵 7(1 - 事件 190 源 B 的最大值)。源 C(鍵 5)被忽略。
  • 3 = 5 ; 鍵 9 是唯一匹配參數的值
  • 4 = 7; 鍵 13 和 15 是唯一與事件 190 匹配的鍵,即使 Source 和 NumImages 具有與其他參數匹配的值。

我認為你想要多個聚合:

首先找到每個 ID-Source 組合的最大值,然後為每個 ID 求和:

select ID, sum(MaxNumImages) as SumMaxNumImages
from
 ( 
   select ID, max(NumImages) as MaxNumImages
   from table 
   where Source in ('A','B') and Event = '190'
     and NumImages is not null
   group by ID, Source
 ) 
 as agg
group by ID ;

引用自:https://dba.stackexchange.com/questions/242386