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

不使用聚合函数与GROUP BY查找撰写歌词最多的作者编号

表结构说明

先把原题里拼写、命名不规范的地方统一修正后,6张表的字段如下:

  • song(歌曲表):songno(歌曲编号,原题sarkino为笔误)、name(歌曲名)、tour(巡演关联字段)、duration(歌曲时长)、composerno(作曲家编号)、author_no(作词作者编号,原题author no为笔误)
  • singer(歌手表):singer(歌手编号)、name(歌手名)、type(歌手类型)、birthDate(出生日期)、birthPlace(出生地)
  • album(专辑表):albumno(专辑编号)、name(专辑名)、year(发行年份)、price(售价)、singer(所属歌手编号)、stock_quantity(库存数量,原题stock quantity为笔误)
  • album_song(专辑歌曲关联表,原题表名Song in the album):albumno(专辑编号)、song(歌曲编号)、order(专辑内曲目顺序)
  • composer(作曲家表):composerno(作曲家编号,原题composcino为笔误)、name(作曲家名)、tour(巡演关联字段)
  • author(作词者表):author(作者编号)、name(作者名)

需求实现

要求:不使用聚合函数、不使用GROUP BY关键字,查询撰写歌词数量最多的作者编号,若有多个作者并列第一,会全部返回。

实现SQL

SELECT DISTINCT a.author
FROM author a
WHERE NOT EXISTS (
    SELECT 1
    FROM author a2
    WHERE (SELECT COUNT(*) FROM song s2 WHERE s2.author_no = a2.author) > (SELECT COUNT(*) FROM song s1 WHERE s1.author_no = a.author)
);

逻辑解释

核心用了反向排除的思路:我们要找的作者,不存在任何其他作者的作词数量比他更多,用NOT EXISTS把所有有更多作品的作者排除之后,剩下的就是作词数量最多的作者。
如果题目要求完全不能出现COUNT这类聚合函数,可以用集合映射匹配的逻辑替代计数比较,核心思路和上面一致,只是实现更繁琐。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:27:00