select 
sum(if(count_money > 0, count_money, 0)) as sum_receipt,
sum(if(count_money < 0, count_money, 0)) as sum_paid 
from tableName;

得到sum_receipt为总收入,sum_paid为总支出。

2、sum与case when 结合使用

select 
sum(case when count_money > 0 then count_money else 0 end) as sum_receipt,
sum(case when count_money < 0 then count_money else 0 end) as sum_paid 
from tableName;
  1. 可以发现,case when和if函数的功能是相同的,if的使用更简洁直观
  2. 条件复杂时,使用case when,条件简单时,使用if()
今天群里有人问了个问题是这样的:  然后有群友是这样回答的 代码如下: select name,sum(case when stype=4 then money*(-1) else money end ) as M from table group by name 我想了想,应该可以用IF函数 于是改了下 代码如下: select name,sum(money*IF(stype=4,-1,1)) as M from table group by name 两种方式那种更效率还未测试。 您可能感兴趣的文章:MySQL 统计查询实现代码如何
查询各科成绩最高分、最低分和平均分,以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,等率,优良率,优秀率(及格为>=60,等为:70-80,优良为:80-90,优秀为:>=90)。 要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列 select c.ci.
select *,if(sva=1,"男","女") as ssva from taname where sva != "" select CASE sva WHEN 1 THEN '男' ELSE '女' END as ssva from taname where sva != '' 多个if else情况的实现举例: SELECT CASE 1 WHEN 1 THEN 'one'
MySQL有一个用于判断多种情况的语句,类似于java的switch…case,在写SQL过程需要用到case when嵌套,在这里记录一下,以防忘记。 简单例子: SELECT WHEN ISNULL(work_order_no) THEN (CASE WHEN 2 > 1 THEN 11 ELSE 22 END) (CASE WHEN 1 > 0 THEN 33 ELSE 66 END) qk_20030102 WHERE work_or
2.将学生按照性别区分 我们一般的写法就是使用group by进行分组。 select t.ssex, count(t.sname) from STUDENT t group by t.ssex; 如果...
本文讲述了mysqlinsert与select的嵌套使用的方法,对于初学MySQL的朋友有一定的借鉴价值。 这里需要实现在mysql从多个表组合字段然后插入到一个新表,通过一条sql语句实现该功能需求。具体情形是:有三张表a、b、c,现在需要从表b和表c分别查几个字段的值插入到表a对应的字段。对于这种情况,我们可以使用如下的语句来实现: INSERT INTO db1_name(field1,field2) SELECT field1,field2 FROM db2_name 当然,上面的语句比较适合两个表的数据互插,如果多个表就不适应了。对于多个表,我们可以先将需要查询的字段j
举例如下: 数据表为DemoTable,字段有id, condition1,condition2,condition3,condition4,condition5 要求是查询DemoTable,condition1,condition2,condition3,condition4,condition5五个字段符合任意两个或两个以上的条件的内容。 可使用case when来实现这个条件,需要嵌套子查询语句 sql语句代码示例如下: 代码如下: SELECT * FROM DemoTable WHERE ((SELECT CASE 1 WHEN condition1满足条件 THEN 1 E
CREATE TABLE `wf_task` ( `id` varchar(32) NOT NULL, `buss_no` varchar(128) NOT NULL DEFAULT '' COMMENT '订单号', `cust_id` varchar(32) DEFAULT NULL COMMENT '客户ID', `cust_name` varchar(64) DEFAULT NULL COMMENT ' 其,condition是条件表达式,value是需要被求和的字段或表达式,table_name是需要进行操作的表名。在条件表达式,可以使用比较运算符(如=、<、>)和逻辑运算符(如AND、OR、NOT)。 例如,如果需要统计表orders所有订单价值大于1000的商品数量,可以使用如下语句: SELECT SUM(CASE WHEN value > 1000 THEN 1 ELSE 0 END) FROM orders; 该语句将返回一个整数,表示符合条件的商品数量。
只因为你而温柔: 不对源码是preHandle返回false才会执行afterCompletion[code=html] boolean applyPreHandle(HttpServletRequest request, HttpServletResponse response) throws Exception { // todo interceptorList保存这所有的拦截器 for (int i = 0; i < this.interceptorList.size(); i++) { HandlerInterceptor interceptor = this.interceptorList.get(i); // todo 调用拦截器的preHandle方法, 返回false它就直接中断了 if (!interceptor.preHandle(request, response, this.handler)) { // todo 如果拦截器返回false, 遍历拦截器执行拦截器的afterCompletion方法 triggerAfterCompletion(request, response, null); return false; this.interceptorIndex = i; return true; [/code] 使用ThreadLocal保存用户登录信息 weixin_44691099: treadLocal通过.currtread()方法直接接可以获取当前线程,由于具有隔离性所以可以通过.get方法获取当前线程保存的用户信息,如果用map存储的话首先得有用户id,因为你没法知道当前登录人是谁,或者必须每次请求都带用户id,thread底层就是用map实现的,只不过它的key是thread