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

MySQL #1055报错:仅按pu.pu_ward_name分组的解决方案咨询

解决MySQL GROUP BY仅按pu.pu_ward_name分组的报错问题

兄弟,这个#1055报错我太熟了——这完全是MySQL的only_full_group_by模式在“严格把关”!它的核心规则是:SELECT列表里的每一列,要么出现在GROUP BY子句中,要么被聚合函数(比如SUM、MAX、MIN)包裹,否则就会判定你可能拿到不符合预期的分组结果。

你当前的查询里,entry_date、pu.o_code、pu.pu_lga_name这些列既不在GROUP BY里,也没被聚合,自然触发了这个错误。下面给你两种解决方案,优先推荐第一种(符合SQL标准):


方案一:给非分组/非聚合列添加聚合函数(推荐)

如果像pu.pu_lga_name、pu.pu_ward_code这类字段,同一个pu.pu_ward_name分组下的所有行值都是唯一的,那用MAX()或MIN()包裹它们完全不影响结果(因为同一组里值都一样,聚合后还是原数值);而像entry_date这类可能有多个值的字段,你可以根据业务需求选择取最大、最小或其他聚合逻辑。

修改后的查询语句如下:

SELECT 
  pu.pu_ward_name,
  MAX(entry_date) AS entry_date, -- 按需求换成MIN()也可以
  MAX(pu.o_code) AS o_code,
  pu.pu_ward_name,
  MAX(pu.pu_lga_name) AS pu_lga_name,
  MAX(pu.pu_code) AS pu_code,
  MAX(pu.pu_ward_code) AS pu_ward_code,
  MAX(pu.pu_lga_code) AS pu_lga_code,
  MAX(pu.pu_voters_reg_count) AS pu_voters_reg_count,
  SUM(total_vote_cast) AS total_vote_cast,
  SUM(apc_total_vote) AS apc_total_vote,
  SUM(pdp_total_vote) AS pdp_total_vote,
  SUM(adp) AS adp,
  MAX(ward_name) AS ward_name -- 因为r.ward_name和pu.pu_ward_name关联,聚合后结果一致
FROM post_election_info r 
LEFT JOIN polling_unit pu ON r.ward_name = pu.pu_ward_name 
WHERE lga_name = 'BORIPE' 
GROUP BY pu.pu_ward_name;

方案二:临时关闭only_full_group_by模式(不推荐)

这个方法属于“绕开规则”,虽然能快速解决报错,但可能导致分组结果不符合预期(比如同一分组里的非聚合列会随机取一行的值),只适合临时测试场景:

  1. 先查看当前的SQL模式:
SELECT @@sql_mode;
  1. 移除only_full_group_by并设置新的SQL模式(会话级,重启MySQL后失效):
SET sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

如果需要永久生效,得修改MySQL的配置文件(比如my.cnf或my.ini),找到sql_mode配置项去掉only_full_group_by,然后重启服务。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:30:09