Я должен отобразить имя столбца с наибольшим значением в строке в oracle

#sql #oracle

#sql #Oracle

Вопрос:

 COUNTRY     NUM_GUNS MAX_BOR  MAX_DISP
Gt.Britain  40000    45000    32000
Germany     40000    45000    42000
USA         60000    48000    46000
Japan       45000    54000    65000
  

Это моя таблица, и мне нужно имя столбца с наибольшим значением в строке.Пример для Gt.Britain максимальное значение равно 45000, я хочу отобразить его как max_bor.

Спасибо.

Комментарии:

1. вы хотите отобразить 4500 как максимум или вы хотите отобразить имя столбца как max_bor ?

2. я хочу отобразить max_bor

3. Для значения maimum в строке мне нужно отобразить его имя столбца..

4. @user3743684 Можете ли вы предоставить пример вывода

5. СТРАНА MAX_VAL ИМЯ Германия 45000 max_bor Gt.Великобритания 45000 max_bor Япония 65000 max_disp США 60000 num_guns

Ответ №1:

Просто попробуйте сделать это явно, вот так:

 select case 
         when NUM_GUNS = Greatest(NUM_GUNS, MAX_BOR, MAX_DISP) then
           'NUM_GUNS'
         when MAX_BOR = Greatest(NUM_GUNS, MAX_BOR, MAX_DISP) then
           'MAX_BOR'  
         else
           'MAX_DISP'  
       end as MaxColumnName,
       Greatest(NUM_GUNS, MAX_BOR, MAX_DISP) as MaxColumnValue   
  from MyTable 
  

Ответ №2:

Следующий запрос выдает результат столбца, содержащего максимальное значение

 `SELECT t.country, 
(CASE
    When t.NUM_GUNS >= t.MAX_BOR 
        then (case when t.NUM_GUNS >= t.MAX_DISP then t.NUM_GUNS else t.MAX_DISP)
    When t.MAX_BOR >= t.MAX_DISP
        then (case when t.MAX_BOR >= t.NUM_GUNS then t.MAX_BOR else t.NUM_GUNS)
    when t.MAX_DISP >= t.NUM_GUNS
        then (case when t.MAX_DISP >= t.MAX_BOR then t.MAX_DISP else t.MAX_BOR))
as max_column

from country_table as t
order by t.country`
  

Ответ №3:

Вы можете использовать CASE оператор

 SELECT COUNTRY,
       CASE WHEN NUM_GUNS > MAX_BOR AND NUM_GUNS > MAX_DISP THEN 'NUM_GUNS' ELSE NUM_GUNS END NUM_GUNS,
       CASE WHEN MAX_BOR > NUM_GUNS AND MAX_BOR > MAX_DISP THEN 'MAX_BOR' ELSE MAX_BOR END MAX_BOR ,
       CASE WHEN MAX_DISP > MAX_BOR AND MAX_DISP > NUM_GUNS THEN 'MAX_DISP' ELSE MAX_DISP END MAX_DISP 
FROM YourTable
  

Вывод:


     COUNTRY     NUM_GUNS MAX_BOR  MAX_DISP
    --------------------------------------
    Gt.Britain  40000    MAX_BOR  32000
    Germany     40000    MAX_BOR  42000
    USA         NUM_GUNS 48000    46000
    Japan       45000    54000    MAX_DISP