3

カウントの列があり、列をこの列の最大値で割ってレートを取得したいと考えています。私は試した

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

しかし失敗しました。GROUP BY のないものも試しましたが、まだ失敗しました。

私の場合、配当が機能しなかったため、count desc を注文し、最初のものを選択します。製品サブカテゴリのカウントが異なるとします。製品カテゴリごとに、サブカテゴリの数をそのカテゴリの最大数で割りたいと思います。集約関数を回避する方法は考えられません。

4

3 に答える 3

2

カテゴリごとに 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
于 2013-08-22T18:46:55.657 に答える
2

以下は、SQL のすべての方言で機能します。

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

一部のバージョンの SQL は整数除算を行うため、結果は 0 または 1 になることに注意してください。これは、1.0 を掛けるか、float にキャストすることで修正できます。

ほとんどのバージョンの SQL もサポートしています。

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

整数除算についても同じ注意事項が適用されます。

于 2013-08-22T18:39:51.803 に答える
1

サブクエリを使用してmax値を取得することをお勧めします (同じクエリに両方を含めると、集計しているのと同じ列でグループ化しているため、期待どおりに機能しない可能性があります)。

Select t.count / (select max(sub.count) from table sub)
from table t
group by t.count
于 2013-08-22T18:42:17.800 に答える