ich eine Tabelle in PostgreSQL haben, die Informationen wie diese hat:aus einem Satz in einer Spalte niedrigsten Wert auswählen
ID | Value | Total
12 | 'foo' | 16
15 | 'loo' | 1
13 | 'too' | 11
67 | 'roo' | 7
Die Abfrage, die ich entweder eine einzelne ID oder mehrere IDS gegeben werden bauen müssen, die durch Kommas sind getrennt. Nur der Wert muss zurückgegeben werden. Wenn mehrere IDs vorhanden sind, wird nur das Ergebnis des Satzes zurückgegeben, der die niedrigste Summe aufweist.
Das ist mein Anfang, aber es ist nicht genau das, was ich bin nach:
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: Um klar zu sein, ich eine Funktion bin Gebäude dass
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$
Es wird verwendet, :
get_test_results("342949283940829308")
OR
get_test_results("67, 12")
Die ID-Werte in diesem Aufruf stimmen nicht mit der Beispieltabelle überein. Das Ergebnis sollte NUR den Wert von der niedrigsten TOTAL der IDs in der Menge zurückgeben, wenn mehr als eine ID an die Funktion übergeben wird.
Beispiel gegebenen Eingabe und gewünscht aus bieten setzen – SMW
'table.id = ANY (regexp_split_to_array (sample_id, '')) ; 'wird auch für einen einzelnen Wert gut funktionieren. Keine Notwendigkeit für eine "if" -Anweisung. Aber es ist völlig unklar, was Sie mit "* dem Ergebnis des Satzes, der die niedrigste Summe * hat", meinen. Bitte [bearbeiten] Sie Ihre Frage und fügen Sie die erwartete Ausgabe basierend auf einer Beispieleingabe hinzu. –
Aktualisiert, um Eingabe und Ausgabe hinzuzufügen. – Lithodora