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()

更多推荐