sql按列最大值划分列

时间:2013-08-22 18:37:55

标签: sql

我有一列计数,并希望将列除以此列的最大值以获得费率。 我试过了

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

但失败了。 我也试过没有GROUP BY的那个,但仍然失败了。

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

3 个答案:

答案 0 :(得分:2)

以下适用于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;

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

答案 1 :(得分:1)

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

Select t.count / (select max(sub.count) from table sub)
from table t
group by t.count

答案 2 :(得分:1)

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

select t.count*1.0/(SELECT max(t.count) 
                    FROM table a
                    WHERE t.category = a.category)
from table t

或者您需要PARTITION BY MAX()

select t.count/(max(t.count) over (PARTITION BY category))
from table t
group by t.count