У меня есть таблица в PostgreSQL, который имеет информацию, как это:Выберите наименьшее значение в столбце из набора
ID | Value | Total
12 | 'foo' | 16
15 | 'loo' | 1
13 | 'too' | 11
67 | 'roo' | 7
Запрос я должен строить будет даваться либо один идентификатор или несколько IDS, которые запятая разделены. Необходимо вернуть только значение. Если имеется несколько идентификаторов, то возвращать только результат набора, который имеет самый низкий Total.
Это мое начало, но это не совсем то, что я после:
IF(position(',' in sample_id)>0) THEN
RETURN QUERY SELECT value FROM table WHERE table.id = ANY(regexp_split_to_array(sample_id,','));
ELSE
RETURN QUERY SELECT value FROM table WHERE table.id = sample_id;
END IF;
EDIT: Чтобы быть ясно, что я строю функцию, которая
CREATE OR REPLACE FUNCTION public.get_test_results(IN sample_id text)
RETURNS TABLE(test_result text) AS
$BODY$
BEGIN
IF(position(',' in sample_id)>0) THEN
RETURN QUERY SELECT value FROM table WHERE table.id = ANY(regexp_split_to_array(sample_id,','));
ELSE
RETURN QUERY SELECT value FROM table WHERE table.id = sample_id;
END IF;
END;
$BODY$
Он используется :
get_test_results("342949283940829308")
ИЛИ
get_test_results("67, 12")
Значения идентификатора в этом вызове не коррелируют с примерной таблицей. Результат должен ТОЛЬКО возвращать значение из самого низкого ИТОГО идентификаторов в наборе, если в функцию передано более одного идентификатора.
обеспечить пример данного входа и желательно из положить – SMW
'table.id = ANY (regexp_split_to_array (sample_id, '')) ; 'будет работать отлично для одного значения. Нет необходимости в выражении 'if'. Но совершенно непонятно, что вы подразумеваете под «* результатом набора, имеющего наименьшее общее количество». Пожалуйста, отредактируйте свой вопрос и добавьте ожидаемый результат на основе образца ввода –
Обновлено для добавления ввода и вывода – Lithodora