假如有一個表,記錄如下:
ID DNO AMT
1 AA2 5
1 AA1 10
2 AA1 10
2 AA3 6
3 AA1 10
3 AA3 6
現在需要獲得如下結果(ID值只出現一次的情況下,使得AMT的總和最大,而且DNO記錄要完整出現,比如AA3出現有兩行記錄,則要么全部取,要么都不取):
ID DNO AMT
1 AA2 5
2 AA3 6
3 AA3 6
這種情況用PL/SQL有什么簡便點的實作方法嗎?
uj5u.com熱心網友回復:
你的結果好像和你對結果的描述并不一致。要的是每個ID下,AMT最小的那行?
uj5u.com熱心網友回復:
不好意思,我前面沒有表述清楚,我的意思是:
結果集中,ID值只出現一次的情況下,使得每個不同DNO對應的AMT的和最大,比如上面我想獲得的結果中,AA2的AMT值為5,AA3的AMT值為6,這樣他們兩個DNO的AMT值的和為5+6=11(DNO相同的行AMT值一定是相同的),而且取結果集的時候DNO記錄要完整出現,比如AA3出現有兩行記錄,則要么全部取,要么都不取,在上面的列子中,如果取DNO=AA1的記錄,則必須取出ID=1,2,3的記錄,就不能再取DNO=AA2和AA3的記錄了,因為ID在結果集中重復,但是這樣的話他的AMT和值為10,所以不是最優解
uj5u.com熱心網友回復:
看不出來你的結果集從表里取數出來的規律,描述的也不清晰結果集中,ID值只出現一次的情況下,使得每個不同DNO對應的AMT的和最大,比如上面我想獲得的結果中,AA2的AMT值為5,AA3的AMT值為6,這樣他們兩個DNO的AMT值的和為5+6=11(DNO相同的行AMT值一定是相同的),而且取結果集的時候DNO記錄要完整出現,比如AA3出現有兩行記錄,則要么全部取,要么都不取,在上面的列子中,如果取DNO=AA1的記錄,則必須取出ID=1,2,3的記錄,就不能再取DNO=AA2和AA3的記錄了,因為ID在結果集中重復,但是這樣的話他的AMT和值為10,所以不是最優解
uj5u.com熱心網友回復:
看暈了,不知道您想要什么結果。uj5u.com熱心網友回復:
資料量大嗎?轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/34736.html
標籤:開發
上一篇:mysql中的聚合函式
