如果存在于组中,则识别最大值 - Oracle SQL

时间:2017-11-01 23:04:23

标签: sql oracle group-by

我正在尝试识别群组中的最大值。

我正在尝试Max和Min功能。 但是我不能得到最大值,只要有更大的一个,如果它们都是一样的话,我不想做任何事情。

预期结果 示例1

settings.py

预期结果 示例2

OWNER   ACCOUNT   MONEY  isMAX
Admin   account1  1000   YES  
Admin   account2  500    NO
Admin   account3  300    NO

预期结果 示例3

OWNER   ACCOUNT   MONEY  isMAX
Admin   account1  500     
Admin   account2  500    
Admin   account3  500    

我正在玩MAX,MIN和CASE功能。

2 个答案:

答案 0 :(得分:1)

这样的事情:

select t.*,
       (case when min(money) over (partition by owner, account) = 
                  max(money) over (partition by owner, account)
             then NULL
             when money = max(money) over (partition by owner, account)
             then 'YES'
             else 'NO'
        end) as isMax
from t;

答案 1 :(得分:1)

这应该这样做:

SQL Fiddle

查询1

SELECT
    t1.OWNER,
    t1.money,
    CASE
        WHEN t1.money = t2.ma AND t1.money > T2.mi
        THEN 'YES'
        WHEN t1.money < T2.ma
        THEN 'NO'
        ELSE ''
    END AS isMAX
FROM t t1
INNER JOIN (
        SELECT OWNER, max(money) ma, min(money) mi
        FROM t
        GROUP BY OWNER
    ) t2
    ON t1.OWNER = t2.OWNER

order by owner, ismax desc

<强> Results

|  OWNER | MONEY |  ISMAX |
|--------|-------|--------|
| Admin1 |  1000 |    YES |
| Admin1 |   500 |     NO |
| Admin1 |   500 |     NO |
| Admin2 |   500 | (null) |
| Admin2 |   500 | (null) |
| Admin2 |   500 | (null) |
| Admin3 |   500 |    YES |
| Admin3 |   500 |    YES |
| Admin3 |   300 |     NO |