我在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行代码。它也做了一些计算。不只是平均值)
我有20个testtype参数,我用原始查询从hibernate代码调用这个函数
SELECT compute_average(?, ?);
现在,问题是,因为我有20种不同的测试类型,所以我打了20次这个电话。
我正在努力挽救这20次往返。最初我考虑使用groupby,但似乎不能从mysql函数返回tuple。
有没有其他方法来实现这一点?
暂无答案!
目前还没有任何答案,快来回答吧!