У меня есть функция в Mysql - определение выглядит следующим образом:
CREATE FUNCTION `compute_average`(roleId BIGINT, testType VARCHAR(255)) RETURNS double
SET @ct := (SELECT COUNT(1) FROM activiti
WHERE
AND test_type = testType
AND TIMESTAMPDIFF(SECOND, started_on, completed_on) <= 1209600
AND role_id = roleId);
SET @row_id := 0;
SET @average := 0.0;
SELECT AVG(TIMESTAMPDIFF(SECOND, started_on, completed_on)) / 3600 AS median INTO @median
FROM activiti
WHERE completed_on IS NOT NULL
AND (SELECT @row_id := @row_id + 1)
BETWEEN @ct/2.0 AND @ct/2.0 + 1
ORDER BY TIMESTAMPDIFF(SECOND, started_on, completed_on)
LIMIT 1;
RETURN @average;
Эта функция mysql должна подсчитывать среднее значение всех ролей на основе testType.(Фактическая логика очень сложна, около 20 строк кода. Она также выполняет некоторые вычисления. Не только AVG)
У меня есть 20 параметров testType, и я вызываю эту функцию из моего кода гибернации с необработанным запросом как
SELECT compute_average(?, ?);
Теперь вопрос в том, что у меня есть 20 различных типов тестов, я делаю этот вызов 20 раз.
Я пытаюсь сохранить эти 20 поездок туда и обратно.Сначала я думал об использовании groupBy, но похоже, что вы не можете вернуть кортеж из функции mysql.
Есть ли другой способ реализовать это?