请教下这种情况可以用一段语句完成吗?
sql吧
全部回复
仅看楼主
level 1
bai2551739 楼主
流水帐形式的
日期 用户 金额 状态(状态里面写着已收就该笔账款已经收了)
例子:
2025-4-14 小A 2000
2025-4-14 小A 500 已收款
2025-4-14 小B 2000
2025-4-14 小A 200
显示要求:
用户 总的金额 已收款总金额
小A 总金额 2700元 收款500
小B 总金额 2000元 收款0
这样怎么写?
2025年04月13日 17点04分 1
level 3
没有主键,没有动作日期,这表建的就二五眼
2025年04月13日 22点04分 4
level 3
sum()over(),或开窗给记录编个序号,然后以序号递归。
2025年04月13日 22点04分 5
level 3
我用我手里的测试表给你做个例子
mysql> select * from sc;
+-----+------+-------+
| sno | cno | grade |
+-----+------+-------+
| 11 | 21 | 85 |
| 12 | 22 | 60 |
| 11 | 22 | 46 |
| 13 | 22 | 90 |
| 11 | 23 | 75 |
| 12 | 23 | 73 |
| 13 | 23 | NULL |
+-----+------+-------+
7 rows in set (0.00 sec)
select sc_.sno,sc_.cno,sc_.grade, sv, (sum(sv)over(order by index_))as vs
from
(select (row_number()over()) as index_,sc.*,
(case when cno<23 then grade else 0 end)as sv
from sc
) as sc_;
+-----+------+-------+------+------+
| sno | cno | grade | sv | vs |
+-----+------+-------+------+------+
| 11 | 21 | 85 | 85 | 85 |
| 12 | 22 | 60 | 60 | 145 |
| 11 | 22 | 46 | 46 | 191 |
| 13 | 22 | 90 | 90 | 281 |
| 11 | 23 | 75 | 0 | 281 |
| 12 | 23 | 73 | 0 | 281 |
| 13 | 23 | NULL | 0 | 281 |
+-----+------+-------+------+------+
7 rows in set (0.00 sec)
2025年04月14日 11点04分 6
level 3
select sc_.sno,sc_.cno,sc_.grade, sc_.sv,
(sum(case when cno<23 then grade else 0 end)over(order by index_))as vs
from
(select (row_number()over()) as index_,sc.*,
(case when cno<23 then grade else 0 end) as sv
from sc
) as sc_;
+-----+------+-------+------+------+
| sno | cno | grade | sv | vs |
+-----+------+-------+------+------+
| 11 | 21 | 85 | 85 | 85 |
| 12 | 22 | 60 | 60 | 145 |
| 11 | 22 | 46 | 46 | 191 |
| 13 | 22 | 90 | 90 | 281 |
| 11 | 23 | 75 | 0 | 281 |
| 12 | 23 | 73 | 0 | 281 |
| 13 | 23 | NULL | 0 | 281 |
+-----+------+-------+------+------+
7 rows in set (0.00 sec)
能看懂这个,你就出徒了!
2025年04月14日 12点04分 7
感谢,[笑尿]新人还没有开始系统性学习。正在找资料学。
2025年04月18日 01点04分
level 1
SELECT
用户,
SUM(金额) AS 总金额,
SUM(CASE WHEN 状态 = '已收款' THEN 金额 ELSE 0 END) AS 已收款总金额
FROM
流水账表
GROUP BY
用户;
2025年04月24日 01点04分 8
1