查詢學生全為男生的老師為哪些?

2021-09-27 03:16:00 字數 3319 閱讀 3061

舉個例子:有個教師表,有兩個列 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 在此基礎上拓展教學內容,橫向縱向均...