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

埃森哲面试SQL分组问题:如何用单条DML语句实现指定分组

解决方案:按排序结果分组生成组编号

你可以通过窗口函数实现这个需求,以下提供两种常用的单条SQL语句方案:

方案一:使用ROW_NUMBER + CEILING

这种方式灵活性更高,适合需要自定义每组行数的场景(比如改成每组3行只需调整除数):

SELECT 
    colA,
    CEILING(ROW_NUMBER() OVER (ORDER BY colA) / 2.0) AS `group`
FROM 
    your_table_name
ORDER BY 
    colA;

逻辑说明:

  1. ROW_NUMBER() OVER (ORDER BY colA):先将colA按升序排序,给每行分配从1开始的连续行号
  2. CEILING(行号 / 2.0):将行号除以2后向上取整,实现每2行一组的分组逻辑
  3. 最终按colA排序保证输出顺序与示例一致

方案二:使用NTILE函数

当你明确知道要分成的组数时,NTILE会更简洁(这里6条数据分成3组,每组正好2条):

SELECT 
    colA,
    NTILE(3) OVER (ORDER BY colA) AS `group`
FROM 
    your_table_name
ORDER BY 
    colA;

逻辑说明:

NTILE(3)会将排序后的数据集均匀划分为3个组,自动给每行分配对应的组编号,完美匹配你的需求

注意:group是SQL保留关键字,所以用反引号(`)包裹避免语法错误,不同数据库可能需要用双引号("),比如PostgreSQL。

内容的提问来源于stack exchange,提问作者Aswini Shivamurugan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 18:42:36