Когда строка имеет значение MAX, тогда получить значение строки «Да»? - PullRequest
2 голосов
/ 28 января 2020

Я думаю, что это должно быть быстро, но как мне определить значение MAX таблицы и присвоить ей строковую метку "Да"?

Я знаю, что в этом случае есть оператор case но просто нужно какое-то направление.

Пример

ID      Amount   Max
110      1000     
111      1000
112      2000    Yes
113      1000

Ответы [ 2 ]

2 голосов
/ 28 января 2020

Вы можете использовать оконные функции:

select 
    t.*,
    case when amount = max(amount) over () then 'Yes' end
from mytable t

Некоторым СУБД не нравится пустое предложение over(), в этом случае вместо этого можно использовать rank():

select 
    t.*,
    case when rank() over(order by amount desc) = 1 then 'Yes' end
from mytable t

Демонстрация на DB Fiddle :

 id | amount | case
--: | -----: | :---
110 |   1000 | <em>null</em>
111 |   1000 | <em>null</em>
112 |   2000 | Yes 
113 |   1000 | <em>null</em>
1 голос
/ 28 января 2020

Вы можете использовать подзапрос, если СУБД не поддерживает оконные функции:

select t.*, 
      (case when t.amount = (select max(t1.amount) from table t1) then 'Yes' else '' end) as Max
from table t;

Вы можете исключить предложение else в случае, если вместо этого вы хотите null.

...