You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL练习中带MAX函数的SELECT子查询取值是否随分组动态变化?

text exercise

疑问直接答复

你担心的子查询返回固定全局最大值的情况不会发生。
你写的这段HAVING里的子查询是关联子查询,WHERE条件里引用了外层分组的APA.Edition和APA.Conference字段,会针对外层分组出来的每一个「会议+届次」组合单独执行,计算的是当前届次下的作者最大发文量,不是跨所有届次的全局最大值。

现有代码的错误点

你的核心逻辑思路是对的,但有几个语法/逻辑错误会导致代码跑不通或者结果错误:

  • 隐式连接缺匹配条件:用逗号写的两表关联只匹配了Conference字段,没匹配Edition字段,会生成大量无效笛卡尔积,统计的论文数完全不准。
  • 字段归属/表名拼写错误:SELECT里取的是EC表的EditionName,GROUP BY里错写成APA.EditionName;筛会议的子查询里把表名EDITIONS_OF_THE_CONFERENCE少写了THE,写成了EDITIONS_OF_CONFERENCE,会直接报字段/表不存在的错误。
  • 内层派生表缺别名:最里层统计每个作者发文量的子查询作为派生表时没有加别名,在绝大多数SQL环境下会触发语法错误。

修正后的可运行代码

SELECT 
  EC.EditionName,
  APA.AuthorCode
FROM EDITIONS_OF_THE_CONFERENCE EC
JOIN AUTHOR_PRESENTS_ARTICLE APA
  ON EC.Conference = APA.Conference
  AND EC.Edition = APA.Edition
WHERE EC.Conference IN (
  SELECT Conference
  FROM EDITIONS_OF_THE_CONFERENCE
  GROUP BY Conference
  HAVING COUNT(*) >= 10
)
GROUP BY
  EC.Edition,
  EC.EditionName,
  EC.Conference,
  APA.AuthorCode
HAVING COUNT(*) = (
  SELECT MAX(TotalP)
  FROM (
    SELECT
      AuthorCode,
      Edition,
      Conference,
      COUNT(*) TotalP
    FROM AUTHOR_PRESENTS_ARTICLE APA1
    WHERE
      APA1.Edition = APA.Edition
      AND APA1.Conference = APA.Conference
    GROUP BY AuthorCode, Edition, Conference
  ) AS author_paper_count
)

执行逻辑说明

修正后的代码完全匹配题目要求:

  1. 先筛选出累计举办届数不少于10场的会议
  2. 关联得到这些会议每一届的所有发文作者记录
  3. 按「会议届次+作者」分组,统计每个作者在对应届次的发文总数
  4. 对每个分组单独计算当前届次下的最高发文量,只保留发文数等于最高值的作者,就是每一届发表论文最多的作者。

内容的提问来源于stack exchange,提问作者Sebastian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 16:54:21