舉個例子:有個教師表,有兩個列 id 和 教師名字; 有個學生表,有三列:姓名, 性別和教師id, 現在要查詢學生全為男生的教師有哪些? (一條sql)
教師表 teacher_n
學生表 student_n
思路:學生表中***=1代表男生,***=0代表女生
看上圖我們發現老師的學生有的是男生,有的是女生,有的全為男生,
既然我們想要學生全是男生的老師,那最先想到的就是要把學生裡有女生的老師剔除掉,可是,怎麼剔除呢?
首先想到的是對老師進行分組,檢視各老師下面的學生分布
第一步:
對老師進行分組,然後對該老師下面的學生分性別計數
我們看到 t_id是4的老師的學生都是男的
選出這個t_id是4的老師
select
b.t_id
from
( select
t_id,
count( case when a.*** = 1 then id else null end ) as man_num,
count( case when a.*** = 0 then id else null end ) as woman_num
from
student_n as a
group by
t_id
) as b
where
b.woman_num =0
我們拿到了符合條件的老師的id,然後匹配到出這個老師的名字
select *
from teacher_n
where t_id
in (
select
b.t_id
from
( select
t_id,
count( case when a.*** = 1 then id else null end ) as man_num,
count( case when a.*** = 0 then id else null end ) as woman_num
from
student_n as a
group by
t_id
) as b
where
b.woman_num =0)
做到這裡,我們已經成功提取出符合條件的老師名字,但是還有沒有可以改進的呢?
當然有了,第三步中我們用到的是in ,由於樣本量很小,所以這樣做沒什麼影響,但是當資料量很大時,會嚴重影響查詢效率。因為每次提取乙個t_id,都會遍歷一次全表。
所以一般情況下,我們都是使用join來優化
select
c.t_name
from
teacher_n as c
inner join (
select
b.t_id as t_id
from
(select
t_id,
count( case when a.*** = 1 then id else null end ) as man_num,
count( case when a.*** = 0 then id else null end ) as woman_num
from
student_n as a
group by
t_id
) as b
where
b.woman_num = 0
) as d on c.t_id = d.t_id
從原來的0.031s縮短到了0.018s.
我們知道,老師帶學生一共有三種情況,老師只帶了男學生,只帶女學生,帶的學生中有男有女。
我們怎麼判定老師只帶了男學生呢?
老師帶了學生,老師只帶男學生,如果我們找到老師帶的學生人數,又找出男生人數,這兩個人數相當等,那我們就可以找出符合條件的老師
第一步:找出每個老師帶了多少學生
第二步:找出每個老師下面帶了多少個男學生
第三步:將上面兩個條件合併,確定符合條件的老師id
select
a.t_id
from
( select t_id, count( *** ) as num from student_n where *** = 1 group by t_id ) as a
inner join ( select t_id, count( *** ) as num from student_n group by t_id ) as b on a.t_id = b.t_id
where
a.num = b.num
第四步:將上面的id與teacher_n表連線,得到老師名 老師喜歡的學生
估計以後我家小朋友注定有兩件事情會變不了了 1.我會擔心的沒完沒了。因為他性格溫和,不會和人動手。和他爸爸類似,就沒和人打過架。當然,並不能說他軟弱,人家只是不直接來硬的,喜歡動腦子,不同意的事情,沉默或者不配合,即使是拒絕,也不會說的很難聽,反正就是讓你聽著吧,被拒絕了,但是又沒辦法反擊,無傷大雅...
沃老師學生的成績
時間限制 c c 2秒,其他語言4秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 第一次期中考終於結束啦!沃老師是個語文老師,他在評學生的作文成績時,給每位學生的分數都是乙個小於10的非負小數。amy 8.99999999999999999999...
學生和老師心中理想的彼此
大學教育不同於以往,師生關係發生了明顯的變化,對於彼此的訴求也有了改變。學生想要什麼樣的老師,老師青睞於什麼樣的學生?討論如下 學生 1 大學老師首先不能再進行填鴨式教學,不能照本宣科,如此與聽書無異,應該更注重思維 方法的訓練,培養學科意識,啟發引導點撥為主 2 在此基礎上拓展教學內容,橫向縱向均...