在sql中创建一个组

Posted

技术标签:

【中文标题】在sql中创建一个组【英文标题】:Create a group in sql 【发布时间】:2021-07-16 20:56:39 【问题描述】:

我有一个包含如下字段 ORDER 和 FLAG 的表,我想使用分析函数创建 GRP 列。有人可以告诉我如何在 sql 中做到这一点吗?

ORDER FLAG GRP
1 Y 1
2 N 1
3 N 1
4 Y 2
5 N 2
6 Y 3
7 Y 4

【问题讨论】:

GRP 列的计算依据是什么?它看起来不像是 Order 和 FLAG 的函数。编写查询来计算 GRP 的唯一方法是它的值是否可以从 Order 和 FLAG 的值派生。 【参考方案1】:

看起来您需要在每个 'Y' 处开始新组。然后对它们进行计数/总和:

select
  t.*
  , sum(case flag when 'Y' then 1 end) over(order by order_id asc) as grp
from your_table t

注意:永远不要使用orderkeyfrom 等列,因为它们是 SQL 中的保留关键字。这就是我将order 重命名为order_id 的原因。

【讨论】:

以上是关于在sql中创建一个组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 s-s-rS 中创建一个子组,将其他组的特定行的值相加?

使用 SQL 在表中的每组记录中创建自定义记录。基于场景

使用 CASE WHEN 和 IN 在 SQL 中创建计算列

如何在 Python 中创建一个位数组?

在 Visual Studio 数据库项目/SQL Server 中创建默认数据

在同一资源组中创建两个 VM,但 Terraform 不希望销毁第一个