2017-03-06 63 views
-1

嗨我想要一個SQL語句,將返回所有課程 至少有2名學生登記,這是按課程排列與 最多的學生。我很新的SQL的東西,我覺得有點困難。MySQL語句返回2名學生

這裏是我當前的數據庫

CREATE TABLE `course` (
     `CourseID` char(11) NOT NULL, 
     `Course_name` varchar(22) DEFAULT NULL, 
     `hours_per_week` varchar(22) DEFAULT NULL, 
     `Start_date` date DEFAULT NULL 
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

    -- 
    -- Dumping data for table `course` 
    -- 

    INSERT INTO `course` (`CourseID`, `Course_name`, `hours_per_week`, `Start_date`) VALUES 
    ('C001', 'Cert 1', '15', '2012-02-01'), 
    ('C002', 'Cert 2', '20', '2012-02-02'), 
    ('C003', 'Cert 3', '16', '2012-02-03'), 
    ('C004', 'Cert 4', '20', '2012-02-13'); 

    -- -------------------------------------------------------- 

    -- 
    -- Table structure for table `enrolment` 
    -- 

    CREATE TABLE `enrolment` (
     `studentID` char(11) NOT NULL, 
     `courseID` char(11) NOT NULL 
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

    -- 
    -- Dumping data for table `enrolment` 
    -- 

    INSERT INTO `enrolment` (`studentID`, `courseID`) VALUES 
    ('S001', 'C001'), 
    ('S002', ' C001'), 
    ('S003', ' C002'), 
    ('S004', ' C002'), 
    ('S005', ' C004'); 

    -- -------------------------------------------------------- 

    -- 
    -- Table structure for table `student` 
    -- 

    CREATE TABLE `student` (
     `StudentID` char(11) NOT NULL, 
     `FirstName` varchar(22) DEFAULT NULL, 
     `LastName` varchar(22) DEFAULT NULL, 
     `DOB` date DEFAULT NULL 
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

    -- 
    -- Dumping data for table `student` 
    -- 

    INSERT INTO `student` (`StudentID`, `FirstName`, `LastName`, `DOB`) VALUES 
    ('S001', 'Alison', 'Tildesley', '1984-05-09'), 
    ('S002', 'Fred', 'Nile', '1940-03-03'), 
    ('S003', 'Christine', 'Anu', '1970-09-01'), 
    ('S004', 'Jame', 'Brown', '1976-02-03'), 
    ('S005', 'Mark', 'Oliphant', '1958-03-10'), 
    ('S006', 'George', 'Bush', '1951-11-28'); 

這是我曾嘗試

SELECT FROM COURSES WHERE STUDENT_ID >=2 

我知道我要補充student_id一行到我的課程表,但我仍然困惑如何獲得所需結果。我很抱歉,我對數據庫和MYSQL語句很陌生。

+0

大開始。你是否也可以向我們展示預期結果,並獲得該表格數據。並且您當前的查詢嘗試。 – jarlh

+0

你有什麼試過嗎? – noobCoder

+0

另外...我們會回來做你的功課?你會給我們分配你的標誌嗎? –

回答

1

這應該這樣做:

SELECT C.CourseID, C.Course_name, COUNT(E.StudentID) Students_num 
FROM course C 
JOIN enrolment E USING(CourseID) 
GROUP BY C.CourseID, C.Course_name 
HAVING Students_num >= 2 
ORDER BY Students_num DESC, C.Course_name 

這將提取所有課程加入了他們的登記記錄,然後由課程ID和姓名它們分組,統計的學生人數;最後的HAVING子句將放棄在分組後將少於2個學生的所有記錄。

這是用於測試的working SQL fiddle

+0

嗨馬泰奧非常感謝你。你能告訴我什麼?像C.CourseID和C.Course_name? –

+0

'C'就是我爲'course'表選擇的別名,在'FROM course C'行;我真的建議你在http://dev.mysql.com/上閱讀一些關於mysql語法的文檔。 –

+0

#1064 - 你的SQL語法有錯誤;檢查對應於您MariaDB的服務器版本正確的語法使用在附近的6號線 「HAVING Students_num> = 2 LIMIT 0,25」我得到這個,當我運行此查詢 –

0

未測試)

select 
    c.courseID, count(0) 
from course c, enrolment e 
where c.CourseID = e.CourseID 
group by 
    c.courseID 
having 
    count(0) >= 2 
order by 
    count(0) desc 
+0

工作的手冊!謝謝五位:) –

+0

是否會返回至少有2名學生註冊的所有課程「哪些課程以最多的學生排列」?謝謝 –

+0

我想是的,不確定。沒有得到我的計算中的MySQL。 – Five