【数据库计算问题】

75闪光雷 2018-08-31 05:32:52
我有个数据表table如下:
id num type
1 30 1
2 40 2
3 10 2
4 20 1
需求是 type为1的num当成正数,
type为2的num当成负数,
求num 的和

上图结果应该为30-40-10+20=0
请问怎么写Sql语句
...全文
263 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
75闪光雷 2018-09-03
  • 打赏
  • 举报
回复
引用 3 楼 ACMAIN_CHM 的回复:
mysql> select sum(if(type=1,1,-1)*num)
    -> from t75;
+--------------------------+
| sum(if(type=1,1,-1)*num) |
+--------------------------+
|                        0 |
+--------------------------+
1 row in set (0.00 sec)

mysql>
谢谢大神 经实践可用!
引用 1 楼 baidu_36457652 的回复:
select (select sum(num)as zh from p1 where type=1 group by type) - (select sum(num) zh from p1 where type=2 group by type) as cha;
谢谢啦
引用 4 楼 Take_Me_Hand 的回复:
首先type为1的num是正数,type为2的num是负数。 直接将type分组,然后分出type为1和2的组。 然后再把type1的num和type2的num各自求和。 最后再用type1的num和减去type2的和。
好的感谢 感谢
派哒哒星 2018-09-02
  • 打赏
  • 举报
回复
首先type为1的num是正数,type为2的num是负数。 直接将type分组,然后分出type为1和2的组。 然后再把type1的num和type2的num各自求和。 最后再用type1的num和减去type2的和。
ACMAIN_CHM 2018-09-01
  • 打赏
  • 举报
回复
mysql> select sum(if(type=1,1,-1)*num)
-> from t75;
+--------------------------+
| sum(if(type=1,1,-1)*num) |
+--------------------------+
| 0 |
+--------------------------+
1 row in set (0.00 sec)

mysql>
ACMAIN_CHM 2018-09-01
  • 打赏
  • 举报
回复
mysql> select * from t75;
+------+------+------+
| id | num | type |
+------+------+------+
| 1 | 30 | 1 |
| 2 | 40 | 2 |
| 3 | 10 | 2 |
| 4 | 20 | 1 |
+------+------+------+
4 rows in set (0.00 sec)

mysql> select sum((3-type*2)*num) as tsum
-> from t75;
+------+
| tsum |
+------+
| 0 |
+------+
1 row in set (0.00 sec)

mysql>
  • 打赏
  • 举报
回复
select (select sum(num)as zh from p1 where type=1 group by type) - (select sum(num) zh from p1 where type=2 group by type) as cha;

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧