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

疑问直接答复
你担心的子查询返回固定全局最大值的情况不会发生。
你写的这段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 )
执行逻辑说明
修正后的代码完全匹配题目要求:
- 先筛选出累计举办届数不少于10场的会议
- 关联得到这些会议每一届的所有发文作者记录
- 按「会议届次+作者」分组,统计每个作者在对应届次的发文总数
- 对每个分组单独计算当前届次下的最高发文量,只保留发文数等于最高值的作者,就是每一届发表论文最多的作者。
内容的提问来源于stack exchange,提问作者Sebastian
相关产品推荐
相关产品推荐

