powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Сортировка с условием
3 сообщений из 3, страница 1 из 1
Сортировка с условием
    #33604699
grey_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
У меня такой вопрос:
имеется табличка chislo
one | two
-----+------
45 | 6
78 | 50
443 | 298
11 | 10
0 | 29
нуно выбрать из неё one и two отсортированные по выражению two/ (one /100)
вся проблема в том, что на 0 делить нельзя =)
такой запрос "почти" решил проблему:
SELECT one, two FROM chislo ORDER BY CASE WHEN one <> 0 THEN two/(one/100::float8)::float8 END DESC;
one | rtwo
-----+------
0 | 29
11 | 10
443 | 298
78 | 50
45 | 6
но всё равно строка со значением one=0 "не на своём месте"..
как мона решить эту проблему ?
(в идеале должно быть
one | rtwo
-----+------
11 | 10
443 | 298
78 | 50
45 | 6
0 | 29
)
...
Рейтинг: 0 / 0
Сортировка с условием
    #33604963
Funny_Falcon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему не насвоем? Очень даже на своем:

Код: plaintext
CASE WHEN one <>  0  THEN two/(one/ 100 ::float8)::float8 END

Если one = 0, то данный case возвращает NULL - а нул больше всего на свете в PostgreSQL.

Сделай:
Код: plaintext
1.
CASE WHEN one <>  0  THEN two/(one/ 100 ::float8)::float8
    ELSE <меньше меньшего( например - 1 , если у тебя числа больше  0 )> END

или
Код: plaintext
1.
ORDER BY CASE WHEN one<> 0  THEN  1  ELSE  0  END,
CASE WHEN one <>  0  THEN two/(one/ 100 ::float8)::float8 END DESC; 
...
Рейтинг: 0 / 0
Сортировка с условием
    #33605053
grey_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Сортировка с условием
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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