#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