是否可以创建一个mySQL函数,该函数接受查询中的结果集作为参数?
基本上我有很多查询将返回结果结果集,如下所示:
id | score 70 | 25 71 | 7 72 | 215 74 | 32 75 | 710 76 | 34 78 | 998 79 | 103 80 | 3
我希望将值标准化,使它们达到0到1之间的范围。 我认为我这样做的方式是应用计算:
nscore = (score-min(score))/(max(score) - min(score))
获得以下结果
id | score 70 | 0.022 71 | 0.004 72 | 0.213 74 | 0.029 75 | 0.710 76 | 0.031 78 | 1.000 79 | 0.100 80 | 0.000
但我无法提出查询来获取此查询中的最小值和最大值以及结果,因此考虑使用函数(不能使用存储过程)但无法记录如何传递结果集。
任何帮助表示赞赏!
谢谢!
编辑: 结果中的得分字段是计算字段。无法直接选择它。
例如:返回上述结果的示例查询 -
select t.id as id, count(*) as score
from tbl t
inner join tbl2 t2 on t.idx = t2.idx
where t2.role in (.....)
仅用于演示目的,而非实际架构或查询
答案 0 :(得分:1)
没有。 MySQL不支持使用结果集作为参数定义函数。
不幸的是,MySQL不支持公用表表达式(CTE),也不支持分析函数。
要从MySQL查询中获取此结果...在MySQL中执行此操作的一种方法是将原始查询作为内联视图返回,两次次...
举个例子:
SELECT t.id
, (t.score-s.min_score)/(s.max_score-s.min_score) AS normalized_score
FROM (
-- original query here
SELECT id, score FROM ...
) t
CROSS
JOIN ( SELECT MIN(r.score) AS min_score
, MAX(r.score) AS max_score
FROM (
-- original query here
SELECT id, score FROM ...
) r
) s
ORDER BY t.id
修改强>
根据添加到问题的查询......
SELECT q.id
, (q.score-s.min_score)/(s.max_score-s.min_score) AS normalized_score
FROM ( -- original query goes here
-- ------------------------
select t.id as id, count(*) as score
from tbl t
inner join tbl2 t2 on t.idx = t2.idx
where t2.role in (.....)
-- ------------------------
) q
CROSS
JOIN ( SELECT MIN(r.score) AS min_score
, MAX(r.score) AS max_score
FROM ( -- original query goes here
-- ------------------------
select t.id as id, count(*) as score
from tbl t
inner join tbl2 t2 on t.idx = t2.idx
where t2.role in (.....)
-- ------------------------
) r
) s
ORDER BY q.id