Sie können keine optionalen Parameter in gespeicherten MySQL-Prozeduren festlegen.
Sie können jedoch optionale Parameter in einer MySQL-UDF festlegen.
Sie wissen, dass MySQL ein AVG-Aggregat hat Funktion ?
Problemumgehung Wenn Sie sich der Hässlichkeit dieser Problemumgehung stellen können, finden Sie hier einen Beispielcode, der eine durch Kommas getrennte Zeichenfolge mit Werten als Eingabe verwendet und den Durchschnitt zurückgibt.
DELIMITER $$
CREATE FUNCTION MyAvg(valuestr varchar) RETURNS float
BEGIN
DECLARE output float;
DECLARE arg_count integer;
DECLARE str_length integer;
DECLARE arg float;
DECLARE i integer;
SET output = NULL;
SET i = LENGTH(valuestr);
IF i > 0 THEN BEGIN
SET arg_count = 1;
WHILE i > 0 DO BEGIN
IF MID(valuestr, i, 1)
SET i = i - 1;
END; END WHILE;
/* calculate average */
SET output = 0;
SET i = arg_count;
WHILE i > 0 DO BEGIN
SET arg = SUBSTRING_INDEX(
SUBSTRING_INDEX(valuestr, ',' , i)
, ',', -1 );
SET output = output + arg;
SET i = i - 1;
END; END WHILE;
SET output = output / arg_count;
END; END IF;
RETURN output;
END $$
DELIMITER ;
Verwenden Sie concat_ws, um die Funktion zu füttern.
SELECT MyAvg(CONCAT_WS(',',100,200,300,500)) AS test;
Sie können auch eine UDF schreiben in C(++) oder Delphi/Lazarus