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

MySQL group by语句报Error 1064错误,对应子查询语法是否正确?

SQL 1064报错排查及语法问题说明

你提供的SQL不仅子查询不符合规范,还存在多处语法、逻辑问题,直接触发了1064语法报错,具体问题如下:

  • 派生表(FROM后的子查询)语法缺失:参考示例中明确要求FROM (子查询) AS 别名的格式,你代码里用于计算average appraised price的子查询,既没有右括号闭合查询语句,也没有给这个派生表设置别名,是触发1064错误的直接原因。
  • 子查询逻辑错误:你在子查询内部直接引用了外层表v_winning_clerks的dateentered字段,而FROM后的派生表是独立运行的结果集,无法访问外层表的字段,这部分逻辑需要调整,可改为窗口函数或子查询放到SELECT子句中实现。
  • GROUP BY规则不兼容:你SELECT子句中返回了account.company、account.name、inventory.sellernum三个非聚合字段,但GROUP BY仅声明了inventory.sellernum一个字段,MySQL 5.7及以上版本默认开启ONLY_FULL_GROUP_BY模式,语法修复后也会触发聚合规则报错,需要把另外两个非聚合字段也加入GROUP BY列表。

修正后的参考写法如下:

SELECT 
    `account`.`company`,
    `account`.`name`, 
    `inventory`.`sellernum`,
    ROUND(AVG(`v_winning_clerks`.`sellprice`),2) / t.`average appraised price` AS `average ratio`
FROM `v_winning_clerks`
JOIN `inventory` USING(`itemnum`, `auctionnum`)
JOIN `attendance` USING(`auctionnum`, `sellernum`)
JOIN `account` USING(`accountnum`)
-- 调整子查询逻辑,避免引用外层字段
CROSS JOIN (
    SELECT ROUND(AVG(inventory.appraisedprice * IF(vwc.dateentered >= NOW() - INTERVAL 12 MONTH,3,IF(vwc.dateentered BETWEEN NOW() - INTERVAL 24 MONTH AND NOW() - INTERVAL 12 MONTH,2, 1))), 2) AS `average appraised price`
    FROM v_winning_clerks vwc 
    JOIN inventory USING(itemnum, auctionnum)
) AS t
GROUP BY `inventory`.`sellernum`, `account`.`company`, `account`.`name`

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:36:04