powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / order by в функции
5 сообщений из 5, страница 1 из 1
order by в функции
    #35193506
javaman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, уважаемые коллеги.
Я отдаю себе отчет в том, что вопрос, который я хочу задать, относится к категории "детский сад, вторая четверть", но уж больно поджимает время. Опыт программирования на сиквеле отсутствует.

Буду признателен, если сжалитесь. =)

Есть функция

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE or replace FUNCTION get_goodsByPrice(float8, float8, sortby boolean)
RETURNS setof goods AS $$

SELECT * FROM goods WHERE (price >= $ 1 ) and (price <= $ 2 ) order by price;
/*
    SELECT * FROM goods WHERE (price >= $1) and (price <= $2)
	IF sortby = true THEN ORDER BY price ASC
	ELSE ORDER BY price DESC
*/

$$ LANGUAGE SQL;

Необходимо сортировать селект по возрастанию либо по убыванию в соответствии со значением параметра sortby. Подскажите, пожалуйста, как нужно изменить функцию.

Спасибо.
...
Рейтинг: 0 / 0
order by в функции
    #35193576
Фотография Niemi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хех
Код: plaintext
...[ ORDER BY expression [ ASC | DESC | ] ...
всё тама
http://www.postgresql.org/docs/8.3/interactive/sql-select.html
...
Рейтинг: 0 / 0
order by в функции
    #35194031
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если в лоб и сильно не задумываться, то так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE or replace FUNCTION get_goodsByPrice(float8, float8, sortby boolean)
RETURNS setof goods AS $$

SELECT * FROM goods WHERE (price >= $ 1 ) and (price <= $ 2 ) order by price * 
CASE WHEN sortby THEN  1  ELSE - 1  END ;

$$ LANGUAGE SQL;
Только нуллы всегда будут сверху.
...
Рейтинг: 0 / 0
order by в функции
    #35194337
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kruchinin PahanЕсли в лоб и сильно не задумываться, то так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE or replace FUNCTION get_goodsByPrice(float8, float8, sortby boolean)
RETURNS setof goods AS $$

SELECT * FROM goods WHERE (price >= $ 1 ) and (price <= $ 2 ) order by price * 
CASE WHEN sortby THEN  1  ELSE - 1  END ;

$$ LANGUAGE SQL;
Только нуллы всегда будут сверху.если бы price был индексированным (что вряд ли - несколько не то поле по смыслу, чтобы индексироваться), то чтобы упростить работу оптимайзеру, я бы писанул таки на plpgsql (с IF .... ORDER ....ELSE price DESC ), иначе, даже если расписать (спасая индексную сортировку собственно по price )
Код: plaintext
1.
2.
3.
....
order by 
CASE WHEN sortby THEN price
 ELSE - price END 
- то уже при сортировке по "- price" будем иметь сортировку (Seg Scan + Sort key) вместо Index Scan Backward ....
...
Рейтинг: 0 / 0
order by в функции
    #35194477
Фотография Niemi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4321 Kruchinin PahanЕсли в лоб и сильно не задумываться, то так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE or replace FUNCTION get_goodsByPrice(float8, float8, sortby boolean)
RETURNS setof goods AS $$

SELECT * FROM goods WHERE (price >= $ 1 ) and (price <= $ 2 ) order by price * 
CASE WHEN sortby THEN  1  ELSE - 1  END ;

$$ LANGUAGE SQL;
Только нуллы всегда будут сверху.если бы price был индексированным (что вряд ли - несколько не то поле по смыслу, чтобы индексироваться), то чтобы упростить работу оптимайзеру, я бы писанул таки на plpgsql (с IF .... ORDER ....ELSE price DESC ), иначе, даже если расписать (спасая индексную сортировку собственно по price )
Код: plaintext
1.
2.
3.
....
order by 
CASE WHEN sortby THEN price
 ELSE - price END 
- то уже при сортировке по "- price" будем иметь сортировку (Seg Scan + Sort key) вместо Index Scan Backward ....
интересная идея, надо будет попробовать.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / order by в функции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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