埃森哲面试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;
逻辑说明:
ROW_NUMBER() OVER (ORDER BY colA):先将colA按升序排序,给每行分配从1开始的连续行号CEILING(行号 / 2.0):将行号除以2后向上取整,实现每2行一组的分组逻辑- 最终按
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
相关产品推荐
相关产品推荐

