mysql - 运行重新启动的查询

标签 mysql sql

我正在通过 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/

相关文章:

c# - 使用 firebird 和 c# 创建身份字段时创建生成器错误错误

SQL Select 语句返回同一表中下一个日期时间的分钟差异

python - Pandas diff() 函数的 SQL 模拟(第一个离散差值)[LAG 函数]

java - 即使我声明了映射类,未知实体也会 hibernate

mysql - 如何将行作为标题然后计算填充的数据

mysql - 从 mysql 到 Hbase 的近实时同步

mysql - 如何为复选框创建 SQL 表?

sql - 调查数据模型 - 如何避免 EAV 和过度非规范化?

php - 使用 jQuery/javascript 代码时 PHP MVC 应该是什么样子?

MYSQL 在 group by 语句中使用 AND 而不是逗号