Функция MySQL - сохранить несколько поездок туда и обратно - PullRequest
0 голосов
/ 15 октября 2018

У меня есть функция в 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.

Есть ли другой способ реализовать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...