mysql 中不允许使用 FETCH 子句。应该使用什么替代方法

using FETCH clause is not allowed in mysql .what alternative to be used instead

您好,我有 2 个表想使用聚合和 having 子句。你能检查我的查询吗?不起作用

SELECT
    registration.Staff_ID,
    staff.FirstName,
    staff.LastName,
    (sum(registration.RegFeeAmntPaid)) AS The_Best_Seller
FROM registration,staff
WHERE registration.Staff_ID = staff.Staff_ID
GROUP BY Staff_ID
HAVING MAX(SUM(registration.RegFeeAmntPaid)) = SUM(registration.RegFeeAmntPaid);

The nested aggregation MAX(SUM(registration.RegFeeAmntPaid)) 是问题: Nested aggregations are not allowed in SQL: 第一次聚合后,只有一个值。因此,再次聚合没有意义。 (在 Oracle 中,在 GROUP BY 查询的 SELECT 下,可以使用嵌套聚合来获取单个值,但这不是标准。)

此外,在大多数系统中,在 SELECT 下打印的没有聚合的属性必须出现在 GROUP BY 下。 (在标准 SQL 和 PostgreSQL 中,由 GROUP BY 属性在功能上确定的属性是可以的。但是例如在 Oracle 中,它们必须在 GROUP BY 下明确提及,即使实际上并没有改变组。)

另外,在GROUP BY子句中,Staff_ID少了一个table/tupe变量名(不清楚,你是指registration.Staff_ID还是staff.Staff_ID。我知道没关系,但是SQL系统不知道。)

有几种解决方案可以使总和最大化。一个是这样的:

SELECT
    registration.Staff_ID,
    staff.FirstName,
    staff.LastName,
    (sum(registration.RegFeeAmntPaid)) AS The_Best_Seller
FROM registration,staff
WHERE registration.Staff_ID = staff.Staff_ID
GROUP BY registration.Staff_ID,
         staff.FirstName, staff.LastName
HAVING SUM(registration.RegFeeAmntPaid) >= ALL
    (SELECT SUM(s.RegFeeAmntPaid)
     FROM   registration s
     GROUP BY s.staff_id)

另一种解决方案是使用 WITH 子句定义一个辅助 table,其中包含每个 staff_id 的总和。然后你可以使用 MAX 函数。这在没有 WITH 子句的情况下也是可能的,但是需要 FROM 下的子查询(它也提供中间 table)。必须将两个聚合放在不同的 SELECT 子句中。