powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / запрос с условием (логика)
6 сообщений из 6, страница 1 из 1
запрос с условием (логика)
    #38755997
Как в запрос вставить условие if и case

SELECT
prod.money,
prod.profit,
(Здесь нужно условие (если profit > 30 тогда profit = (SELETC val FROM main_param where id=1))) AS price
FROM produkty AS prod
...
Рейтинг: 0 / 0
запрос с условием (логика)
    #38756022
наверное я понял как правильно.

нужно написать функцию с входящими параметрами.
внутри функции сравнивается значение (if или case) и возвращается нужный результат
Правильно?
...
Рейтинг: 0 / 0
запрос с условием (логика)
    #38756075
запрос с условием,

для начала почитать про SQL-оператор условного выбора CASE. После - применить полученные знания на практике. Если не получилось, опубликовать свою версию запроса и попросить помощи в его исправлении. Функцию писать тут точно не нужно. Всё делается средствами ANSI-SQL
...
Рейтинг: 0 / 0
запрос с условием (логика)
    #38756171
Эххх, я уже во всю их пишу всякие проверки.
Реализую через функции и case потом напишу здесь.
Скажете как лучше будет.
Спасибо.
...
Рейтинг: 0 / 0
запрос с условием (логика)
    #38757122
Составит функции для проверки
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
CREATE OR REPLACE FUNCTION checkprofit(numeric, numeric)
  RETURNS numeric AS
$BODY$
DECLARE
 CP numeric;
BEGIN
 SELECT mv.var INTO CP FROM main_variables AS mv WHERE mv.id=1;
 IF (CP is NULL) OR (CP < mv.var) THEN
  CP = mv.var;
 END IF;
 
 IF ($1 is NOT NULL) AND ($2 is NOT NULL) THEN 
  IF $2 > CP THEN
   IF $1 > $2 THEN
    RETURN $1;
   ELSE
    RETURN $2;
   END IF;
  ELSE 
   IF $1 > CP THEN
    RETURN $1;
   ELSE
    RETURN CP;
   END IF; 
  END IF;
 ELSE
  RETURN CP;
 END IF;
 
END; 
$BODY$
  LANGUAGE plpgsql



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE OR REPLACE FUNCTION calculatefactureprice(numeric, numeric, numeric)
  RETURNS numeric AS
$BODY$
DECLARE
 CFP numeric;
BEGIN
 IF ($1 is NOT NULL) AND ($2 is NOT NULL) AND ($3 is NOT NULL) THEN
  CFP = Round($1 + ($1*CheckProfit($2, $3)*0.01), 3);
  RETURN CFP;
 ELSE
  RETURN 0; 
 END IF;  
END; 
$BODY$
  LANGUAGE plpgsql



Использую
Код: sql
1.
SELECT calculatefactureprice(знач1, знач2)



Данные функции увеличивают время запроса в два раза.
Даже если убрать этот запрос время не изменяется SELECT mv.var INTO CP FROM main_variables AS mv WHERE mv.id=1;

Немного не понимаю как работает case и все условия правильно не могу описать.
1. Подскажите можно ли сделать так
case
WHEN знач1 => знач2 THEN и подвложенный еще один when в эту конструкцию "WHEN знач1 => знач2"
end
2. Можете посмотреть посчитать сколько у меня должно быть when по моим функциям что бы я двигался к правильному варианту?
...
Рейтинг: 0 / 0
запрос с условием (логика)
    #38757293
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
запрос с условием,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT 
	CASE WHEN 1=1 THEN  
	'"запрос с условием"' || 
		CASE WHEN 1=2 THEN
			NULL
		ELSE E'\t=\tговнюк'
		END --2
	ELSE
		'а вы, вероятно, хороший чел, но этого никто не узнает'
	END --1
;
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / запрос с условием (логика)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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