Mysql

幫助對欄位進行分組並獲取總和

  • May 23, 2018

我在表格中有一個排序的數據

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      |

引用自:https://dba.stackexchange.com/questions/207609