我有一列计数,并希望将列除以此列的最大值以获得费率。 我试过了
select t.count/max(t.count)
from table t
group by t.count
但失败了。 我也试过没有GROUP BY的那个,但仍然失败了。
命令计数desc并选择第一个,因为股息在我的情况下不起作用。考虑我对产品子类别有不同的计数。对于每个产品类别,我想将子类别的计数除以该类别中的最大计数。我想不出一种避免聚合函数的方法。
答案 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