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中使用常规表,而在临时表中不使用(请参阅)@克沙马,结果也是暂时的吗?如果是,它的来源是什么?