Добрый день!
Люди, разбирающиеся в plsql, помогите, пожалуйста, решить следующую задачку:
Исходные данные:
таблица А:
код | цена
таблица B:
Nгруппы | нижняя граница группы, руб | верхняя граница группы
Задача: нужно построить запрос, в котором напротив цены будет стоять номер группы, к которой она относится.
query A:
код | цена | Nгруппы |
имею ввиду конечно PL/pgSQL
имею ввиду конечно PL/pgSQL
> помогите, пожалуйста,
> помогите, пожалуйста, решить следующую задачку
Так, "помогите" или "сделайте за меня"?
Если второе - неинтересно. Если первое, рассказывайте что делали, что не получается в чём конкретно нужна помощь.
второй вариант :) Эх,
tbl_pr_group - таблица с ценовыми группами (группа, нижний порог, верхний порог)
вот написал функцию, но не понятно, как внутри цикла, перебирающего таблицу с группами, верхними и нижними значениями осуществить выбор нужной группы
CREATE FUNCTION price_group(price real) RETURNS integer AS $$
DECLARE
prgroup integer; /*этой переменной будет присваиваться ценовая группа и возвращаться в качестве результата*/
mviews RECORD;
BEGIN
FOR mviews IN select mgroup, lower_level, upper_level from tbl_pr_group LOOP
вот здесь нужно написать что-то вроде if price between lower_level and upper_level ==True:
return mgroup
END LOOP;
END;
$$ LANGUAGE plpgsql;
Начните с другой таблицы. В
Начните с другой таблицы.
В цикле обрабатывайте запросы вида:
SELECT mgroup FROM tbl_pr_group WHERE price BETWEEN lower_level AND upper_level
где price - это то что получаете из таблицы цен в цикле
Результат этого запроса в переменную. Считая с теми, что получили в цикле из таблицы цен вот у вас уже и нужные три значения для итоговой таблицы в конкретном шаге цикла.
все, разобрался. Большое
все, разобрался. Большое спасибо за помощь.
процедура нормально себе
процедура нормально себе работала, но сегодня вдруг выпала ошибка:
control reached end of function without RETURN
вот сама функция:
CREATE OR REPLACE FUNCTION price_group(price real)
RETURNS integer AS
$BODY$
DECLARE
/*tbl_pr_group%ROWTYPE;*/
prgroup integer; /*этой переменной будет присваиваться ценовая группа и возвращаться в качестве результата*/
mviews RECORD;
BEGIN
FOR mviews IN SELECT mgroup FROM tbl_pr_group WHERE price>=tbl_pr_group.lower_level AND price <= tbl_pr_group.upper_level LOOP
--prgroup=mgroup;
RETURN mviews.mgroup;
END LOOP;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
С чем может быть связано возникновение ошибки?
Например с тем что у вас
Например с тем что у вас RETURN почему-то внутри цикла
о, точно. Спасибо
о, точно. Спасибо