Sql 我可以为检索到的数据集中的每个元组使用MAX函数吗
我的表格结果包含字段:Sql 我可以为检索到的数据集中的每个元组使用MAX函数吗,sql,mysql,Sql,Mysql,我的表格结果包含字段: id count ____________ 1 3 2 2 3 2 从这个表中,我必须形成另一个表得分,如下所示 id my_score _____________ 1 1.0000 2 0.6667 3 0.6667 这就是my_score=count/MAX(count),但是如果我按照 create TEMPORARY TABLE(select id,(count/MAX(count)) AS my_s
id count
____________
1 3
2 2
3 2
从这个表中,我必须形成另一个表得分,如下所示
id my_score
_____________
1 1.0000
2 0.6667
3 0.6667
这就是my_score=count/MAX(count)
,但是如果我按照
create TEMPORARY TABLE(select id,(count/MAX(count)) AS my_score from result);
仅检索到第1行
任何人都可以建议查询,以便为所有元组计算我的_分数
提前感谢。我认为您不可能在一个步骤中将聚合函数应用于每一行。使用存储过程分两步进行计算——计算最大值并将其存储在变量中,然后进行选择并将计数除以变量。或者,您可以使用子查询,但我并不认为这是一种改进
create procedure calculate_score
begin
declare maxcount decimal(6,4);
set maxcount := select max(count) from result;
select id, count / maxcount as score from result;
end
注意:我不确定MySQL是否会隐式处理从int到decimal的数据转换,或者您的列是什么类型的。如果需要手动处理数据转换,则必须调整上述内容。不确定这是否适用于mysql,但请尝试:
select id, count / (select max(count) from result) as my_score
from result
我可能会因为性能问题而犹豫不决,但从语义上讲,这应该是可行的:
select
a.id
, a.count / b.count
from
result a cross join result b
where
b.count = (select max(count) from result)
编辑:@eftpotrm有一个更优雅的解决方案
SELECT
a.ID,
a.count / b.total
FROM result as A
CROSS JOIN (SELECT MAX(Count) AS Total From Result) AS B
B只返回一行,因此您希望将表的笛卡尔积与其自身的聚合进行比较,以获得最终值。+1它在MySQL中使用常规表,而在临时表中不使用(请参阅)@克沙马,结果也是暂时的吗?如果是,它的来源是什么?