SQL Group by Modulo of Row Count

标签 sql tsql group-by

我有以下示例数据:

Id     Name     Quantity
1      Red      1
2      Red      3
3      Blue     1
4      Red      1
5      Yellow   3

因此,对于此示例,总共有 5 个红色、1 个蓝色和 3 个黄色。我正在寻找一种按颜色对它们进行分组的方法,但每组最多有 2 个项目(排序并不重要)。像这样:
Name     QuantityInPackage
Red      2
Red      2
Red      1
Blue     1
Yellow   2
Yellow   1

关于如何在 MS-SQL 2005 上使用 T-SQL 完成此操作的任何建议?

最佳答案

我会定义一个包含序列号的表,比如 11000并加入该表(除非您的数据库支持使用 CONNECT BY 在像 Oracle 一样的查询中生成这些数字):

表号

n
1
2
3
...

我使用 Oracle 尝试了以下查询(也应该与 TSQL 一起使用):
With summed_colors As (
  Select name, Sum(quantity) quantity
  From colors
  Group By name
)
Select
  name,
  Case When n*2-1 = quantity Then 1 Else 2 End quantityInPackage
From summed_colors
Join nums On ( n*2-1 <= quantity )
Order By name, quantityInPackage Desc

它返回
Blue   1
Red    2
Red    2
Red    1
Yellow 2
Yellow 1

关于SQL Group by Modulo of Row Count,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2561585/

相关文章:

python - 对 pandas 数据框列执行多次转换

sql - 名+姓+生日组合是否足够独特?

sql - 存储过程在 7 年后随机停止工作

sql - 一次查询中总和的平均值

sql-server - SQL Server - 使用按位运算符查找最高优先级的项目

pandas - pandas groupby 中的自定义聚合函数

mysql - 按左连接表中的计数进行分组

java - PreparedStatement.executeUpdate() 能否在 INSERT 时返回 0?

SQL:如何从 int 中获取剩下的 3 个数字

SQL - 当过滤器值为空时选择全部