2017-03-06 70 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