2016-11-21 42 views
0

我想創建一個查詢,可以計算女性的數量採取特定的模塊,但有麻煩獲取創建語句。左加上計數

我有一個模塊表:

module_code 
module_title 
module_level 

和我的學生表有:

student_no 
student_init 
student_lname 
student_gender 
.. and so on 

這就是我現在所擁有的。我不認爲我的標題正確的方向:

SELECT COUNT (*) 「Total」 
FROM MODULE 
LEFT OUTER JOIN STUDENT 
ON MODULE.MODULE_TITLE 

SELECT COUNT (*) 「Total」 FROM MODULE 
WHERE MODULE_TITLE = COMPUTER SECURITY 
LEFT JOIN STUDENT 
+0

你試過了嗎? – Aleksej

+0

嗯,我知道它不完整,因爲我需要從學生選擇student_gender纔算數它我只是不知道該怎麼做 – joshwaa

+0

你也必須有一個模塊登記表,也正確嗎?你需要把它放到你的查詢中。你應該使用INNER連接而不是OUTER。 – bassrek

回答

0

假設你student_id列添加到您的module_enrollments表,就可以得到數,像這樣:

SELECT  m.module_title 
      , COUNT(*) 
FROM  module_enrollments me 
INNER JOIN student s ON s.ID = me.student_id 
INNER JOIN module m ON m.ID = me.module_id 
WHERE  s.Gender = 'F' 
GROUP BY m.module_title 
0

您很可能想要顯示沒有女性入讀的模塊,以及那些註冊了女性的模塊。對於您確實需要使用外連接:

SELECT m.module_title 
     , COUNT(s.student_id) female_cnt 
    FROM student s 
    JOIN module_enrollment me 
    ON s.student_id = me.student_id 
    AND s.gender  = 'F' 
    RIGHT JOIN module m 
    ON me.module_id = m.module_id 
    GROUP BY m.module_title; 

此外,因爲你不希望意外過濾模塊,沒有女性入學率,在s.gender = 'F'謂語應該studentsmodule_enrollment代替之間的連接標準的一部分作爲where條款的一部分。

或者您可以使用一個支點:

with src as (
SELECT m.module_title 
     , s.gender 
    FROM student s 
    JOIN module_enrollment me 
    ON s.student_id = me.student_id 
    RIGHT JOIN module m 
    ON me.module_id = m.module_id 
) 
select * 
    from src PIVOT (count(*) cnt 
       for gender in ('F' as female)); 

如果你真的想用一個LEFT加入,而不是RIGHT加入你仍然可以做到這一點:

select m.module_title 
    , count(s.student_id) 
    from module m 
    left join module_enrollment me 
     join student s 
     on s.student_id = me.student_id 
     and s.gender = 'F' 
    on me.module_id = m.module_id 
group by module_title; 

這只是不容易讀。