mysql - 选择总和,直到找到特定行

标签 mysql

CREATE TABLE Coins (Badge VARCHAr(10), Cointype INT,  Number INT);

INSERT INTO Coins (Badge,Cointype, Number) VALUES
('' , 1, 1),
('' , 5, 2),
('' , 20, 3),
('' , 1, 4),
('' , 5, 5),
('' , 5, 6),
('' , 5, 7),
('RESET', 0 , 0),
('' , 1, 8),
('' , 10, 9),
('RESET', 0 , 0),
('' , 5, 10),
('' , 20, 11);

嗨,对于这个表,我希望在第一行上方有以下总和 ('RESET',0,0)

select 
SUM(case when Cointype=1 Then Number else 0 END) as SUM1,
SUM(case when Cointype=5 Then Number else 0 END) as SUM5,
SUM(case when Cointype=20 Then Number else 0 END) as SUM20
from Coins 

结果必须是这样的:

SUM1    SUM5    SUM20
5       20      3 

这在 MySql 中可能吗?

实际情况中,还有一个ID和时间戳字段。顶部记录是具有最高 ID 和时间戳的最新记录。 因此必须汇总最近的记录,直到 RESET 行。 (如果我们需要排序,可以使用 ID 或时间戳字段)

那么表格是这样的:

CREATE TABLE Coins (ID INT, Badge VARCHAr(10), Cointype INT,  Number INT);

INSERT INTO Coins (ID, Badge,Cointype, Number) VALUES
(13,'' , 1, 1),
(12,'' , 5, 2),
(11,'' , 20, 3),
(10,'' , 1, 4),
(9,'' , 5, 5),
(8,'' , 5, 6),
(7,'' , 5, 7),
(6,'RESET', 0 , 0),
(5,'' , 1, 8),
(4,'' , 10, 9),
(3,'RESET', 0 , 0),
(2,'' , 5, 10),
(1,'' , 20, 11);

最佳答案

如果您有自动数字列:

<强> SQL DEMO

select 
    SUM(case when Cointype=1 Then Number else 0 END) as SUM1,
    SUM(case when Cointype=5 Then Number else 0 END) as SUM5,
    SUM(case when Cointype=20 Then Number else 0 END) as SUM20
from Coins 
WHERE ID < ( SELECT MIN(ID)
             FROM Coins
             WHERE Badge = 'RESET' )

输出

| SUM1 | SUM5 | SUM20 |
|------|------|-------|
|    5 |   20 |     3 |

编辑:

更改示例后,行的顺序看起来像是相反的。那么你需要 MAX() 而不是 MIN()

select 
    SUM(case when Cointype=1 Then Number else 0 END) as SUM1,
    SUM(case when Cointype=5 Then Number else 0 END) as SUM5,
    SUM(case when Cointype=20 Then Number else 0 END) as SUM20
from Coins 
WHERE ID > ( SELECT MAX(ID)
             FROM Coins
             WHERE Badge = 'RESET' )

关于mysql - 选择总和,直到找到特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49237559/

相关文章:

mysql - 删除并重新创建 FK 约束或禁用并启用 FK 检查哪个更好?

mysql - 无法在 MySQL LEFT 函数中使用 INT 变量

php - 将 ~1kk 字 rune 本保存到 MySQL

PHP MySQL 只删除存在的记录

php - SQL查询显示当前时间之前的小时

PHP学院教程-查询方法

mysql - 需要帮助构建 SQL 查询

mysql - 归档实时 MySQL 数据库的最佳方式

Java:MySQL 数据截断:不正确的双值:列的 ''

php - Mysql PHP查询选择