SQL报1054 Unknown column 'cleaned.dog_guid'错误咨询
报错原因
1054未知列错误的核心原因是子查询输出的字段和外层引用的字段名不匹配:你的子查询中将d.dog_guid重命名为了dogID,子查询别名cleaned下不存在dog_guid字段,外层自然无法引用。
除此之外原有逻辑还有两个不符合需求的问题:
- 子查询分组字段不全:开启
ONLY_FULL_GROUP_BY模式时,子查询SELECT了dimension字段但GROUP BY仅写了dogID,会触发分组语法错误 - 外层分组逻辑错误:需求是统计每个性格维度下的犬只平均测试数,外层同时按犬只ID+维度分组,最终返回的是单只犬的测试数,根本没有做维度级的平均计算。
修正方案
- 统一字段名:去掉子查询中
dog_guid的多余别名dogID,保证内外层字段名对应 - 补全子查询分组字段:子查询是统计单只犬在对应维度下的总测试数,需要同时按
dog_guid和dimension分组 - 调整外层聚合逻辑:外层仅需按
dimension分组,对单犬测试数求平均即可,维度级统计不需要在最终结果里保留犬只ID字段
修正后可运行代码
SELECT cleaned.dimension, AVG(cleaned.numtests) AS Avgtests FROM ( SELECT d.dog_guid, d.dimension, COUNT(c.created_at) AS numtests FROM dogs d INNER JOIN complete_tests c ON d.dog_guid = c.dog_guid GROUP BY d.dog_guid, d.dimension ) AS cleaned GROUP BY cleaned.dimension;
如果你需要输出明细级数据(即每只犬对应维度的测试数,同时附带维度平均值),可以用窗口函数改写,上述代码直接返回每个维度的平均测试数,匹配你描述的需求。
内容的提问来源于stack exchange,提问作者codingxxx
相关产品推荐
相关产品推荐

