Mysql
幫助對欄位進行分組並獲取總和
我在表格中有一個排序的數據
F1 F2 F3 F4 A M X 1 A N Y 2 A P X 3 B M X 3 B N Y 1 B P X 5
但我想要 F1 列中每一行的值的子計數。像這樣
F1 F2 F3 F4 Sub Total A M X 1 6 A N Y 2 6 A P X 3 6 B M X 3 9 B N Y 1 9 B P X 5 9
我試著拿總和
按 F1、F2、F3 從表組中選擇 *, sum(count);但這並沒有在最後一欄中給出總數。
請幫我
一種方法是對 F4 的總和進行子選擇(這是我能想出的唯一解釋,以便得到 6 和 9)
SELECT x.F1, x.F2, x.F3, x.F4 , ( SELECT SUM(F4) FROM T as y WHERE x.F1 = y.F1 ) as sub_total FROM T as x
如果您的 DBMS 支持視窗函式:
SELECT x.F1, x.F2, x.F3, x.F4 , SUM(x.F4) OVER (PARTITION BY x.F1) as sub_total FROM T as x
您沒有指定您的 RDBMS,但這裡有一個使用 SQL Server 的解決方案。
declare @T table (F1 char(1), F2 char(1), F3 char(3), F4 smallint) insert into @T(F1,F2,F3,F4) VALUES ('A', 'M', 'X', 1), ('A', 'N', 'Y', 2), ('A', 'P', 'X', 3), ('B', 'M', 'X', 3), ('B', 'N', 'Y', 1), ('B', 'P', 'X', 5) SELECT *, SUM(F4) OVER(PARTITION BY F1 ORDER BY F1) AS SUMCNT FROM @T
| F1 | F2 | F3 | F4 | SUMCNT | |----|----|----|----|--------| | A | M | X | 1 | 6 | | A | N | Y | 2 | 6 | | A | P | X | 3 | 6 | | B | M | X | 3 | 9 | | B | N | Y | 1 | 9 | | B | P | X | 5 | 9 |