在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
注意:永远不要使用order
、key
、from
等列,因为它们是 SQL 中的保留关键字。这就是我将order
重命名为order_id
的原因。
【讨论】:
以上是关于在sql中创建一个组的主要内容,如果未能解决你的问题,请参考以下文章
如何在 s-s-rS 中创建一个子组,将其他组的特定行的值相加?
使用 CASE WHEN 和 IN 在 SQL 中创建计算列