【问题标题】:Creating a new column using CASE and maybe count使用 CASE 创建一个新列并可能计数
【发布时间】:2011-01-18 12:46:29
【问题描述】:

现在,我有一个查询得到 3 列。

SELECT a.studentID, a.classdetailID, c.course_title
FROM studentcoursedetails a, classdetails b, course c
WHERE strong> b.classdetailID = a.classdetailID
AND b.courseID = c.courseID
ORDER BY c.course_title, b.classdetailID

我得到的是一列,其中显示了参加课程的学生的 ID、他们所在班级的 ID 以及课程本身的标题。大致如下:

5---8----Airline Security Operations  
4---8----Airline Security Operations  
6---8----Airline Security Operations  
4---9----Airline Security Operations  
8---10---Airline Security Operations  
5---10---Airline Security Operations  
1---1----Airport Design and Construction  
4---1----Airport Design and Construction  
2---1----Airport Design and Construction  
1---2----Airport Design and Construction

我需要一张能显示如下内容的表格:

course_title                Number of Classes  Number of students
Airline Security Operations   3                   4

我曾想过使用CASE,但一想到它,我就迷路了。非常感谢您的帮助。

答案,感谢gbn:

SELECT c.course_title, COUNT(DISTINCT a.studentID) AS “课程中的学生”, COUNT(DISTINCT a.classdetailID) AS “总课程”
FROM studentcoursedetails a
加入 classdetails b ON b.classdetailID = a.classdetailID
加入 course c ON b.courseID = c.courseID
GROUP BY c.course_title

【问题讨论】:

    标签: sql count case


    【解决方案1】:

    您想计算每个 course_title 的每个不同出现次数

    像这样(使用 SQL Server 列别名语法)和正确的 JOIN 语法

    SELECT
        c.course_title
        ,COUNT(DISTINCT a.studentID) AS [Number of students that have taken the course]
        ,COUNT(DISTINCT a.classdetailID) AS [Number of Classes]
    FROM
        studentcoursedetails a
        JOIN
        classdetails b ON b.classdetailID = a.classdetailID
        JOIN
        course c ON b.courseID = c.courseID
    GROUP BY
        c.course_title
    

    【讨论】:

    • 哇哦。哇,它有效。像一个魅力。谢谢。这就是我们使用DISTINCT的方式。
    猜你喜欢
    • 2021-02-22
    • 2021-06-27
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 2019-06-22
    相关资源
    最近更新 更多