mysql执行顺序 sum(if(count_money < 0, count_money, 0))
sql执行顺序
from
on
join
where
group by(开始使用select中的别名,后面的语句中都可以使用)
avg,sum…
having
select
distinct
order by
limit
sql执行顺序导致结果不同
有一条数据符合条件
SELECT
SUM(IF(tcrr.repayment_date <= DATE_ADD(CURDATE(),INTERVAL 3 MONTH), tcrr.amount ,null)) aaa, – 100
IF(tcrr.repayment_date <= DATE_ADD(CURDATE(),INTERVAL 3 MONTH),SUM(tcrr.amount),null) bbb – null
FROM turnover_cont tc
LEFT JOIN turnover_cont_repayment_real tcrr ON tc.id = tcrr.cont_id AND tcrr.is_deleted = 0 AND tcrr.fee_type = 0 – 还款实际
WHERE tc.is_deleted = 0
如果sum和if同时使用,sum必须放到外面
用到group by时:
sum和if同时使用,sum必须放到外面
group_concat和if同时使用,group_concat必须放到外面
1、sum与if结合使用
在这里插入图片描述
如图:表中,count_money 字段代表金额。为正表示收入,负表示支出
2、sum与if结合使用
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;
3、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;
可以发现,case when和if函数的功能是相同的,if的使用更简洁直观
条件复杂时,使用case when,条件简单时,使用if()
更多推荐

所有评论(0)