Oracle SQL - выбрать все максимальные значения столбца из запроса - PullRequest
1 голос
/ 16 января 2020

допустим, это моя таблица:

 Name    |  Surname      | Serial no.  | Price
-----------------------------------------------
 John    |  Smith        | A12444dW33  | 1,234 
 Paul    |  Harrison     | D2344fGGfd  | 2,5
 Richard |  Morris       | We945kfGGE  | 3
 George  |  Washington   | ssf4gt66hJ  | 7,39494

Как получить фактические ДЛИННЫЕ значения для каждого столбца в ОДНОЙ строке на основе длины?

Мне нужно что-то, что будет действительным для каждого типа данных - NUMBER, VARCHAR, DATE et c.

Вывод для примера таблицы должен быть (Серийный номер все одинаковой длины, так что это не важно здесь ...):

 Name    |  Surname      | Serial no.  | Price
-----------------------------------------------
 Richard |  Washington   | A12444dW33  | 7,39494

Все найденные мной вопросы сосредоточены на использовании только с одним столбцом, но мне нужно решение для всех столбцов.

Ответы [ 2 ]

3 голосов
/ 16 января 2020

Вы можете использовать MAX( column ) KEEP ( DENSE_RANK [FIRST|LAST] ORDER BY ... ):

SELECT MAX( Name      ) KEEP ( DENSE_RANK FIRST ORDER BY LENGTH( Name      ) DESC ) AS Name,
       MAX( Surname   ) KEEP ( DENSE_RANK FIRST ORDER BY LENGTH( Surname   ) DESC ) AS Surname,
       MAX( Serial_no ) KEEP ( DENSE_RANK FIRST ORDER BY LENGTH( Serial_no ) DESC ) AS serial_no,
       MAX( Price     ) KEEP ( DENSE_RANK FIRST ORDER BY LENGTH( Price     ) DESC ) AS Price
FROM   your_table;

выходы:

NAME    | SURNAME    | SERIAL_NO  |   PRICE
:------ | :--------- | :--------- | ------:
Richard | Washington | ssf4gt66hJ | 7.39494

db <> скрипка здесь

3 голосов
/ 16 января 2020

Вы можете использовать keep:

select max(name) keep (dense_rank first order by length(name) desc),
       max(Surname) keep (dense_rank first order by length(Surname) desc),
       max(serial) keep (dense_rank first order by length(serial) desc),
       max(price) keep (dense_rank first order by length(price) desc)
from t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...