W Oracle i MySQL, w jaki sposób mogę utworzyć funkcję, która ma nieokreśloną liczbę parametrów, aby można było nazywać się GREATEST (wartość1, wartość2, ...)?Nieokreślona liczba argumentów dla funkcji zdefiniowanych przez użytkownika SQL?
Porównanie dwóch wartości według pewnego standardu jest dość łatwe, ale przekazanie wartości "większej" do kolejnego porównania jest tym, co wydaje mi się, że nie pracuję w SQL.
Dzięki!
Edytuj (po komentarzu Mike'a poniżej): Szukam rozwiązania do porównywania wielu kolumn. Konkretnie, moje pytanie brzmi: jak wdrożyć GREATEST() jako UDF. Poniższy kod porównuje trzy kolumny.
SELECT CASE WHEN CASE WHEN col_1 < col_2 THEN col_2
ELSE col_1 END < col_3 THEN col_3
ELSE CASE WHEN col_1 < col_2 THEN col_2
ELSE col_1 END END AS greatest
FROM figures;
Wygląda na to, że nie jest tak dobrze. O wiele bardziej przydatna będzie ogólna funkcja, która wielokrotnie stosuje tę samą metodę porównania do listy wartości.
przez SQL mam na myśli żadnego produktu bazodanowego SQL ale wolę rozwiązanie, które działa w Oracle lub MySQL
Jest to tak samo jak - wybierz * od, zamówienie według x desc/asc Maksymalna wartość musi być pierwsza/ostatnia? Nawet w XSLt, po prostu sortuję rzeczy, aby uzyskać maksymalną wartość? – Mike
Prawdopodobnie masz na myśli SQL Server - SQL (bez dalszych kwalifikacji) odnosi się do języka, wdrażanego w różnym stopniu przez różne różne produkty, oraz każdego z ich własnymi unikalnymi rozszerzeniami. –
Oto jeden ze sposobów, który skaluje o wiele lepiej instrukcję 'case'. http://stackoverflow.com/questions/7995945/how-to-i-modify-this-t-sql-query-to-return-maximum-value-for-different-colum/7996068#7996068 –