次のようなテーブルがあります。これを TEST と呼びます。
+----+--------+
| id | PRCNTG |
+----+--------+
| 1 | 10 |
| 2 | 20 |
| 2 | 30 |
| 3 | 40 |
| 4 | 50 |
| 5 | 20 |
| 5 | 10 |
| 6 | 20 |
+----+--------+
このPRCNTG
例では、列の合計は 200 です。常にそうとは限りません。
このクエリを実行すると:
SELECT ID, SUM(PRCNTG) FROM TEST GROUP BY ID;
次の結果が得られることを期待しています。
+----+--------+
| id | PRCNTG |
+----+--------+
| 1 | 10 |
| 2 | 50 |
| 3 | 40 |
| 4 | 50 |
| 5 | 30 |
| 6 | 20 |
+----+--------+
PRCNTG
ただし、実際には、合計から列の割合を取得したいと考えています。つまり、こういうことをやりたい。
SELECT ID, 100 * (SUM(PRCNTG)/TOTAL(PRCNTG)) FROM TEST GROUP BY ID;
TOTAL()
グループ化を無視する理論関数はどこにありますか。したがって、この場合は常に 200 を返す必要があります。理論的には、これは次のような出力になります。
+----+--------+
| id | PRCNTG |
+----+--------+
| 1 | 5 |
| 2 | 25 |
| 3 | 20 |
| 4 | 25 |
| 5 | 15 |
| 6 | 10 |
+----+--------+
基本的に、私が求めているのは、集計関数を使用してグループ化を無視するように指示する方法があるかどうかです。
簡単な回避策は、グループ化せずに同じクエリを実行SUM()
し、変数に を取得してから、その変数を の代わりに使用することですがTOTAL(PRCNTG)
、これを行うためのよりエレガントな方法があることを願っています。
SELECT @TOTAL = SUM(PRCNTG) FROM TEST;
SELECT ID, 100 * (SUM(PRCNTG)/@TOTAL) FROM TEST GROUP BY ID;