深入理解一段长的sql语句
经过前段时间搞报表项目自己写sql的能力大大提升,下面这段是自己写的分析一下
select id as teacher_id,sum(leave_time) as total_leave_time from (
select ui.id,l.uid,(endtime-starttime) as leave_time From bk_leave AS l
LEFT JOIN bk_user_info AS ui ON l.uid = ui.uid
WHERE ui.id IN (' . join(',', $teacherIds) . ')
AND l.starttime >= :startAt
AND l.endtime >= :endAt
)as leave_time GROUP BY uid';
首先是两个select,我们应该先看里面的,里面是一个联表查询,其中也结合了一个计算
(endtime-starttime) as leave_time,这样这个子查询其实就是先找到我想要的数据,然后
再在外头用个select去找查出来的数据,把查出来的数据看作是一张表,同时就对这个表
进行了sum(leave_time)的操作,所以感觉写复杂的sql其实就是慢,稳,整理好思绪就好了。

浙公网安备 33010602011771号