sql将列除以列最大值

sql将列除以列最大值,sql,Sql,我有一列count,我想将该列除以该列的max,得到速率。 我试过了 select t.count/max(t.count) from table t group by t.count 但失败了。 我也试了一个没有分组的,但还是失败了 订购count desc并选择第一个,因为在我的情况下,股息不起作用。考虑到我对产品子类别有不同的计数。对于每个产品类别,我想用子类别的计数除以该类别中的最大计数。我想不出一种方法来避免聚合函数。以下方法适用于所有SQL方言: select t.count/(s

我有一列count,我想将该列除以该列的max,得到速率。 我试过了

select t.count/max(t.count)
from table t
group by t.count
但失败了。 我也试了一个没有分组的,但还是失败了


订购count desc并选择第一个,因为在我的情况下,股息不起作用。考虑到我对产品子类别有不同的计数。对于每个产品类别,我想用子类别的计数除以该类别中的最大计数。我想不出一种方法来避免聚合函数。

以下方法适用于所有SQL方言:

select t.count/(select max(t.count) from t)
from table t
group by t.count;
请注意,某些版本的SQL进行整数除法,因此结果将是0或1。可以通过乘以1.0或将其转换为浮点数来修复此问题

大多数SQL版本还支持:

select t.count/(max(t.count) over ())
from table t
group by t.count;

关于整数除法,同样的警告也适用。

您可能希望尝试使用子查询来派生
max
值(在同一查询中包括这两个值可能无法按预期的方式工作,因为您在聚合的同一列上分组)

如果需要每个类别的MAX(),则需要一个相关子查询:

select t.count*1.0/(SELECT max(t.count) 
                    FROM table a
                    WHERE t.category = a.category)
from table t
或者您需要按
您的
MAX()分区


+尽管我仍然认为分子和分母应该互换。
select t.count*1.0/(SELECT max(t.count) 
                    FROM table a
                    WHERE t.category = a.category)
from table t
select t.count/(max(t.count) over (PARTITION BY category))
from table t
group by t.count