我在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函数返回元组。
还有其他方法可以实现吗?