mysql - 如何将相同ID的总和放入一个新列并显示在该ID的每一行上?
问题描述
我有如下表,称为 text_book :
Ord_ID--- book_name--- 金额--- reg_time 01 --- abc1 --- 100 --- 2020/4/22 09:00 01 --- abc2 --- 50 --- 2020/4/22 09:01 01 --- abc3 --- 200 --- 2020/4/22 09:02 02 --- abc1 --- 100 --- 2020/4/22 09:00 02 --- abc2 --- 50 --- 2020/4/22 09:01 | |...
我想要如下 sql 的输出:
Ord_ID--- book_name--- amount--- reg_time ---------Total 01 --- abc1 --- 100 --- 2020/4/22 09:00---350 01 --- abc2 --- 50 --- 2020/4/22 09:01 01 --- abc3 --- 200 --- 2020/4/22 09:02 02 --- abc1 --- 100 --- 2020/4/22 09:00---150 02 --- abc2 --- 50 --- 2020/4/22 09:01 | |...
解决方案
首先生成一个行号,然后加入一个总数,然后根据行号决定打印什么
DROP TABLE IF EXISTS T;
CREATE TABLE T (Ord_ID int, book_name varchar(10), amount int, reg_time datetime);
insert into t values
(01 , 'abc1' , 100 , str_to_date('2020/04/22 09:00', '%Y/%m/%d %H:%i')),
(01 , 'abc2' , 50 , str_to_date('2020/04/22 09:01', '%Y/%m/%d %H:%i')),
(01 , 'abc3' , 200 , str_to_date('2020/04/22 09:02', '%Y/%m/%d %H:%i')),
(02 , 'abc1' , 100 , str_to_date('2020/04/22 09:00', '%Y/%m/%d %H:%i')),
(02 , 'abc2' , 50 , str_to_date('2020/04/22 09:01', '%Y/%m/%d %H:%i'));
select a.ord_id,a.book_name,a.amount,a.reg_time,
case when a.rn = 1 then a.total
else ''
end as total
from
(
select t.*, s.total
, row_number() over (partition by ord_id order by book_name) rn
from t
join
(select ord_id ,sum(amount) total from t group by ord_id) s on s.ord_id = t.ord_id
) a;
+--------+-----------+--------+---------------------+-------+
| ord_id | book_name | amount | reg_time | total |
+--------+-----------+--------+---------------------+-------+
| 1 | abc1 | 100 | 2020-04-22 09:00:00 | 350 |
| 1 | abc2 | 50 | 2020-04-22 09:01:00 | |
| 1 | abc3 | 200 | 2020-04-22 09:02:00 | |
| 2 | abc1 | 100 | 2020-04-22 09:00:00 | 150 |
| 2 | abc2 | 50 | 2020-04-22 09:01:00 | |
+--------+-----------+--------+---------------------+-------+
5 rows in set (0.002 sec)
推荐阅读
- javascript - org.apache.tiles.util.TilesIOException:JSPException 包括路径
- angular - 嵌套的可观察对象在终止后一个接一个地执行
- python - 如何让 groupby 操作正常工作?
- excel - 链接参考单元格以在 excel 中创建新范围
- android - 获得显示旋转的正确方法
- java - JpaRepository,我可以在断言创建的查询字符串时模拟存储库吗?
- r - R Shiny - 使用 DateSlider 动态过滤 ggplot2 图表
- spring - 通过 Spring WebClient 和 HttpComponentsClientHttpConnector 执行 http 请求时出现 NTLM 身份验证问题
- r - R:绘图太大而无法放入窗口
- java - 套接字超时时 TCP 连接会发生什么