SQL-如何获取每行的总和并在条件存在时将其放入,如果不存在则将其放入最后一行

Posted

技术标签:

【中文标题】SQL-如何获取每行的总和并在条件存在时将其放入,如果不存在则将其放入最后一行【英文标题】:SQL- How to get the sum of each row and put it if condition exists, if does not exists put it in the last line 【发布时间】:2020-07-16 20:22:09 【问题描述】:

我有一张这样的桌子(名字还有很多)

name    Class Amount
Alex    C1     100
Brenda  AB     50        
Brenda  C1     100         
Alex    AB     200

我想要以下输出,对每个名称求和,但仅当列 Class 等于 C1 或没有 C1 时才将其放在名称的最后一条记录中。

例如。 Alex 的总和是 300(100+200),而 Brenda 的总和是 150(100+50),Alex 在第一行有 C1,所以总和放在那一行而不是最后一行,brenda 没有C1 类,所以总和在 Brenda 的最后一行。

像这样:

name    Class Amount   Sum
Alex    C1     100     300
Brenda  AB     50       0
Brenda  AB     100     150    
Alex    AB     200      0

知道如何在 SQL 中执行此操作吗? (Access 或 mysql

感谢和问候

【问题讨论】:

【参考方案1】:

您可以在 MySQL 中使用窗口函数:

select t.*,
       (case when row_number() over (partition by name order by (class = 'C1') desc, amount desc) = 1
             then sum(amount) over (partition by name)
             else 0
        end) as sum_amount
from t;

【讨论】:

以上是关于SQL-如何获取每行的总和并在条件存在时将其放入,如果不存在则将其放入最后一行的主要内容,如果未能解决你的问题,请参考以下文章

用于捕获进程 ID 并在存在时将其终止的 Shell 脚本[重复]

SQL查询以在给定条件下明确获取总和

在嵌套for循环内,打印字符串“。”并在满足条件时将其替换为其他字符。 MOOC Java Week 10'Dungeon'

SQL Server插入触发器改进

SQL:获取行列值的总和

如何将任意 Ruby 对象保存到磁盘并在必要时将其读回? [关闭]