深入理解一段長的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其實就是慢,穩,整理好思緒就好了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章