Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Выбор строки с наибольшим количеством не нулевых столбцов / 9 сообщений из 9, страница 1 из 1
19.02.2018, 20:31
    #39604437
order_by_not_null
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор строки с наибольшим количеством не нулевых столбцов
Добрый день всем.
Нужно выбрать из таблицы строку с наибольшим количеством не нулевых столбцов.
Из примера ниже должна быть выбрана последняя строка.
Пока сделал такой вариант (с ещё одним селектом, который выбирает первую строку).
Есть ли более простой/красивый вариант?

Заранее спасибо.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with sel as 
(select 'a' a, null b, null c, 'd' d, null e
union all
select null a, null b, null c, 'd' d, null e
union all
select 'a' a, 'b' b, null c, 'd' d, null e
union all
select 'a' a, null b, 'c' c, 'd' d, 'e' e)
select *
from   sel  s
order by decode(a,null,0,1) + decode(b,null,0,1) + decode(b,null,0,1) + decode(d,null,0,1) + decode(e,null,0,1) desc
...
Рейтинг: 0 / 0
19.02.2018, 21:02
    #39604442
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор строки с наибольшим количеством не нулевых столбцов
order_by_not_nullЕсть ли более простой/красивый вариант?

У дурной задачи не должно быть красивых решений.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
20.02.2018, 07:31
    #39604511
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор строки с наибольшим количеством не нулевых столбцов
order_by_not_nullЕсть ли более простой/красивый вариант?
Код: plsql
1.
nvl2
...
Рейтинг: 0 / 0
20.02.2018, 22:17
    #39605132
__vvp_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор строки с наибольшим количеством не нулевых столбцов
Elicorder_by_not_nullЕсть ли более простой/красивый вариант?
Код: plsql
1.
nvl2



Еще учесть, что таких строк м.б. более одной
...
Рейтинг: 0 / 0
21.02.2018, 09:38
    #39605281
XMLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор строки с наибольшим количеством не нулевых столбцов
__vvp_Elicпропущено...
Код: plsql
1.
nvl2



Еще учесть, что таких строк м.б. более одной

Так тебе надо выбрать строку с максимальным числом пустых полей или отсортировать по количеству пустых полей?
Если первое то можно так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
with sel as 
(select 'a' a, null b, null c, 'd' d, null e
 from dual
union all
select null a, null b, null c, 'd' d, null e
 from dual
union all
select 'a' a, 'b' b, null c, 'd' d, null e
 from dual
union all
select 'a' a, null b, 'c' c, 'd' d, 'e' e
 from dual), 
sel1 as
(select s.* 
  , nvl2(a,0,1) + nvl2(b,0,1) + nvl2(c,0,1) + nvl2(d,0,1) + nvl2(e,0,1) sum_col
  , max (nvl2(a,0,1) + nvl2(b,0,1) + nvl2(c,0,1) + nvl2(d,0,1) + nvl2(e,0,1)) over (partition by 1) max_sum_col
  from   sel  s)
select *  
 from sel1
 where sum_col = max_sum_col
...
Рейтинг: 0 / 0
21.02.2018, 10:22
    #39605308
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор строки с наибольшим количеством не нулевых столбцов
Код: plsql
1.
2.
cardinality(    ku$_vcnt(   a,    b,    c,    d,    e)
multiset except ku$_vcnt(null, null, null, null, null))
...
Рейтинг: 0 / 0
21.02.2018, 18:59
    #39605721
order_by_not_null
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор строки с наибольшим количеством не нулевых столбцов
Извиняюсь за задержку с ответом.

XMLerТак тебе надо выбрать строку с максимальным числом пустых полей или отсортировать по количеству пустых полей?


Мне нужно "выбрать строку с максимальным числом НЕ пустых полей", т.е. самую заполненную.
Если таких строк несколько (например, две строки в которых заполено 4 из 5) то подойдет любая.

Спасибо.
...
Рейтинг: 0 / 0
21.02.2018, 22:14
    #39605838
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор строки с наибольшим количеством не нулевых столбцов
-2-
Код: plsql
1.
2.
cardinality(    ku$_vcnt(   a,    b,    c,    d,    e)
multiset except ku$_vcnt(null, null, null, null, null))



И огрести кучу неявных преобразований в VARCHAR2 - сомневаюсь в реальной таблице вcе поля строковые.

SY.
...
Рейтинг: 0 / 0
26.02.2018, 10:37
    #39607183
XMLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор строки с наибольшим количеством не нулевых столбцов
order_by_not_nullИзвиняюсь за задержку с ответом.

XMLerТак тебе надо выбрать строку с максимальным числом пустых полей или отсортировать по количеству пустых полей?


Мне нужно "выбрать строку с максимальным числом НЕ пустых полей", т.е. самую заполненную.
Если таких строк несколько (например, две строки в которых заполено 4 из 5) то подойдет любая.

Спасибо.
тогда к предыдущему добавь
Код: plsql
1.
AND ROWNUM = 1
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Выбор строки с наибольшим количеством не нулевых столбцов / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]