在 SQL 中结合 FREQUENCY 计数和 INNER CASE
Combining FREQUENCY count and INNER CASE in SQL
对于超过 6 名学生的 class,我如何将两者结合起来以显示学生姓名 (sname
) 和班级编号 (sectno
)?到目前为止我有这个
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
看起来你们很亲密。我认为以下内容应该适合您:
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
在你的 2md Select 中,与 a class 没有关系,它有超过 6 个学生,恕我直言 GROUP BY
应该基于在像 classid
这样的列上。然后您可以使用 Windowed Aggregate:
简单地将两者结合起来
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
对于超过 6 名学生的 class,我如何将两者结合起来以显示学生姓名 (sname
) 和班级编号 (sectno
)?到目前为止我有这个
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
看起来你们很亲密。我认为以下内容应该适合您:
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
在你的 2md Select 中,与 a class 没有关系,它有超过 6 个学生,恕我直言 GROUP BY
应该基于在像 classid
这样的列上。然后您可以使用 Windowed Aggregate:
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