【问题标题】:SQL subselect group function not allowed不允许使用 SQL 子选择组功能
【发布时间】:2013-07-25 10:03:28
【问题描述】:

我遇到了一个 SQL 子查询的问题:我需要编写一个查询来返回订阅数 (count(employeeNumber)) 大于最大允许订阅数 (Maximum) 的课程。

在我的原始查询中,我收到以下错误: 此处不允许使用群组功能。

查询:

SELECT c.CourseName 
FROM courses c 
INNER JOIN subscriptions s ON s.courseCode = c.CourseCode 
INNER JOIN plannedCourses p ON p.CourseCode = s.CourseCode
WHERE COUNT(s.EmployeeNumber) > (SELECT maximum 
                                 FROM plannedCourses 
                                 WHERE s.CourseCode = p.CourseCode);

表格布局:

我怎样才能达到想要的结果?

提前致谢!!

【问题讨论】:

    标签: sql oracle select subquery correlated-subquery


    【解决方案1】:

    您的查询有多个问题。您正在使用相关子查询,但您没有在其from 子句中使用该表。我认为意图是这样的:

    SELECT c.CourseName 
    FROM courses c 
    INNER JOIN subscriptions s ON s.courseCode = c.CourseCode 
    group by c.CourseName, c.CourseCode
    having COUNT(s.EmployeeNumber) > (SELECT "maximum"
                                      FROM plannedCourses p
                                      WHERE c.CourseCode = p.CourseCode);
    

    【讨论】:

    • 我收到以下错误:“不是 GROUP BY 表达式”...但也许我的整个查询都是错误的...顺便说一句,我正在使用 Oracle 数据库。
    • 您是否将where 子句更改为having 子句?
    • @LaurentDeWilde 。 . .无论如何,我看到了问题所在。 s.CourseCode 需要一个聚合函数。相反,我切换到c.CourseCode 并将其放入group by。
    【解决方案2】:

    您可以按如下方式重写您的查询:

    select c.coursename
      from courses c
      join subscriptions s
        on (s.coursecode = c.coursecode)
      join PlannedCourses p
        on (p.coursecode = c.coursecode)
      group by c.coursename 
             , p.maximum
      having count(s.Employeenumber) > p.maximum 
    

    【讨论】:

      猜你喜欢
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 2018-11-13
      • 1970-01-01
      • 1970-01-01
      • 2017-10-18
      • 2011-07-26
      • 2017-09-02
      相关资源
      最近更新 更多