我正在通过 phpmyadmin 运行 MySql 数据库,并正在构建一个查询来汇总一些值。
在 EXCEL 中,公式如下所示 =IF(AND(P6=P5,B6=B5),SUM(H5+F6),F6)
该公式放在 H 列
P 列是一个类标识符。 B 栏是他们的注册号。 H 列是他们的总分。 F列是他们入场的分值。
它在 Excel 中运行得很好。但在 SQL 语法上遇到了一些麻烦。
我知道首先我需要对文件进行排序,以便所有内容都按正确的顺序进行,明白了。但从那时起我就一无所知了。
如果我的 Excel 代码需要更深入的解释,如果有帮助的话,我可以这样做。
最佳答案
据我了解,您需要对一些“分区”或行进行总计。看来在 MySql 中您需要对变量进行一些“黑客攻击”,因为该数据库中不提供分析函数。
以下查询即可完成。它使用三个变量 - @rollingsum 存储 F 列的总和,@prevP 和 @prevB 变量存储 B 和 P 列的先前值)
SELECT s.p, s.b, s.f, s.rollingSum FROM
(
SELECT p,
b,
f,
IF( p=@prevP AND b=@prevB,
@rollingsum := @rollingsum + f,
@rollingsum := f ) as rollingSum,
@prevP := p,
@prevB := b
FROM test_table p, (SELECT @rollingsum := 0, @prevP := '', @prevB := '') r
ORDER BY p,b ) s
示例:
源数据:
P B F
1 1 10
1 1 10
1 2 10
1 2 10
1 2 10
2 2 10
2 2 10
2 2 10
上述查询的结果(rollingsum 列是您的 H 列 - Excel 中的总分):
P B F ROLLINGSUM
1 1 10 10
1 1 10 20
1 2 10 10
1 2 10 20
1 2 10 30
2 2 10 10
2 2 10 20
2 2 10 30
关于mysql - 运行重新启动的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10776951/