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

SQL语句报错#1055:GROUP BY子句不符合only_full_group_by模式求助

修正后的SQL语句及问题说明

原SQL存在的问题

  • 表关联逻辑错误:entries.dog_id = breeds.id 应关联 dogs.id,breeds.id = dogs.breed_id 应改为 dogs.breed_id = breeds.id,原关联把狗和品种的对应关系搞反了。
  • 分组对象错误:需求是统计每只狗的参赛数据,应按狗的唯一标识(如dogs.id)分组,而非按品种分组,否则会将同品种的所有狗合并统计,无法得到单只狗的结果。
  • 违反only_full_group_by模式:SELECT列表中的非聚合字段(如dogs.name、breeds.name)必须出现在GROUP BY子句中,或依赖于GROUP BY中的唯一字段(主键)。
  • 冗余且错误的子查询/分组:子查询的order by count和外层的group by breed都是多余操作,完全不符合需求逻辑。

修正后的SQL

SELECT 
    d.name AS 狗名,
    b.name AS 品种,
    AVG(e.score) AS 平均得分
FROM entries e
JOIN dogs d ON e.dog_id = d.id
JOIN breeds b ON d.breed_id = b.id
GROUP BY d.id, d.name, b.name  -- 按狗的唯一ID及相关非聚合字段分组,满足only_full_group_by要求
HAVING COUNT(e.id) >= 2  -- 筛选参赛次数超过1次的狗
ORDER BY 平均得分 DESC  -- 按平均得分降序排序
LIMIT 10;  -- 取前十条结果

说明

  1. 修正了表关联关系,确保赛事条目正确关联到对应狗只,再关联到狗的品种。
  2. 按狗的唯一ID(d.id)分组,同时将d.name和b.name加入GROUP BY,兼容only_full_group_by模式(若数据库支持主键依赖,仅按d.id分组即可,显式列出适配性更强)。
  3. 使用HAVING子句筛选参赛次数≥2的记录(COUNT(e.id)统计该狗的参赛次数)。
  4. 按平均得分降序排序后,用LIMIT 10获取平均得分最高的前十只狗。

内容的提问来源于stack exchange,提问作者Ich Bin's

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:40:24