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

如何在SQL及Sequelize中使用GROUP BY?GROUP BY报错咨询

解决SQL及Sequelize中GROUP BY的使用问题

错误原因

SQL的GROUP BY语法规则明确:SELECT子句中出现的非聚合列,必须全部包含在GROUP BY子句中。你原查询里SELECT了id、company_number,但GROUP BY仅指定了country_code,不符合规则,因此触发错误。

原生SQL的正确写法

根据实际需求,分两种场景处理:

场景1:按country_code分组,聚合其他列

如果需要对id、company_number进行聚合计算(比如取最大值、最小值),用聚合函数包裹这些列:

SELECT 
  MAX([id]) AS max_id, 
  MAX([company_number]) AS max_company_number, 
  [country_code] 
FROM [core].[company] 
WHERE [core].[company].[id] IN (N'DK-10001560') 
GROUP BY [country_code]

场景2:保留所有查询列的分组

如果你的WHERE条件已经限定了单条唯一记录(id通常是主键),或者需要按所有查询列分组,将id、company_number也加入GROUP BY:

SELECT [id], [company_number], [country_code] 
FROM [core].[company] 
WHERE [core].[company].[id] IN (N'DK-10001560') 
GROUP BY [id], [company_number], [country_code]

Sequelize中的实现

Sequelize严格遵循SQL的GROUP BY规则,对应上述两种场景的写法如下:

场景1:聚合查询

const { Op } = require('sequelize');
const Company = require('./models/company'); // 替换为你的模型路径

async function getGroupedCompanies() {
  const result = await Company.findAll({
    attributes: [
      [Company.sequelize.fn('MAX', Company.sequelize.col('id')), 'max_id'],
      [Company.sequelize.fn('MAX', Company.sequelize.col('company_number')), 'max_company_number'],
      'country_code'
    ],
    where: {
      id: { [Op.in]: ['DK-10001560'] }
    },
    group: ['country_code']
  });
  return result;
}

场景2:全列分组

const { Op } = require('sequelize');
const Company = require('./models/company'); // 替换为你的模型路径

async function getGroupedCompanies() {
  const result = await Company.findAll({
    attributes: ['id', 'company_number', 'country_code'],
    where: {
      id: { [Op.in]: ['DK-10001560'] }
    },
    group: ['id', 'company_number', 'country_code']
  });
  return result;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:35:27