2017-07-17 32 views
0

如何组合两者以显示学生人数超过6的班级的学生姓名(sname)和部门编号(sectno)?到目前为止,我有这个在SQL中合并频率计数和INNER CASE

SELECT student.sname, enroll.sectno, 

FROM student 

INNER JOIN enroll 

ON student.sid=enroll.sid 

SELECT grade, 

COUNT(grade)AS Frequency 

FROM enroll 

GROUP BY grade 

HAVING COUNT(grade)>6 
+0

什么是'student'和'enroll'表之间的关系? –

回答

0

看起来你是非常接近的。我认为以下应为你工作:

SELECT 
student.sname, 
enroll.sectno, 
COUNT(enroll.grade) AS Frequency 
FROM student 
INNER JOIN enroll ON student.sid=enroll.sid 
GROUP BY student.sname, enroll.sectno 
HAVING COUNT(enroll.grade)>6 
+0

我找不到应该在哪里声明我的COUNT变量。我在声明我的INNER JOIN后试过使用WHERE子句。感谢您的时间和帮助。这是非常翔实的 –

+0

感谢您的反馈@ S.Rain乐意帮助! :) – WJS

0

在你为2Md选择没有关系有超过6学生,恕我直言GROUP BY应根据柱像classid类。然后你就可以使用窗总结简单地结合两种:

with cte as 
(
    SELECT student.sname, enroll.sectno, 
     -- get the count per class, might be a different column than sectno 
     count(*) over (partition by enroll.sectno) as cnt 
    FROM student 
    INNER JOIN enroll 
    ON student.sid=enroll.sid 
) 
select * from cte 
where cnt > 6 
+0

我明白了。我对SQL本身很陌生,所以我从来没有想过要使用Partition By或使用Windowed Aggregate。这非常有帮助 –