sql - SQL - 特定的分组/计数(避免游标)
问题描述
我正在尝试在没有游标的情况下进行特定的分组/计数。我知道用游标可以做到这一点,但我试图避免这种情况。我的表如下所示:
ID | Amount
1 | 1200
2 | 1200
3 | 2500
5 | 1200
6 | 1200
7 | 1200
8 | 2500
结果应该是
Count| Amount
2 | 1200
1 | 2500
3 | 1200
1 | 2500
解决方案
这基本上是一种差距和孤岛的情况。
- 数据存储在
TEST
表中 INTER
CTE使用分析函数选择上一行的AMOUNT
值LAG
INTER2
CTE 创建组(使用SUM
解析函数)GRP
最终查询按组(列)分组,按数量计算行数。我包括在内MIN(RN)
,只是为了设置正确的顺序。你可以删除它。
.
with
inter as
(select rn, amount,
isnull(lag(amount) over (order by rn), amount) l_amount
from test
),
inter2 as
(select rn, amount,
sum(case when amount <> l_amount then 1 else 0 end) over (order by rn) grp
from inter
)
select min(rn) rn, amount, count(*) cnt
from inter2
group by amount, grp
order by 1;
推荐阅读
- python - 在python中生成文件名
- windows-10 - Windows 10 物联网和 GPIO
- c# - 如何根据枚举参数获得正确的服务?
- reactjs - ReactJS / Material-ui - SSR 中的样式化系统和样式函数
- typescript - 我需要对填充其他字段时禁用的 mat-form-fied 输入元素进行单元测试
- rust - 为什么带有 async-await 的 Tokio 0.2.0-alpha 服务器不能并行处理请求?
- java - 在未知类型的对象上使用字段
- servicenow - 使用 ServiceNow API 时出现“缺少必填字段”错误
- html - 我无法使用 HTML 或 CSS 操作此图像
- sql-server - Invoke-SqlCmd 坏了,是否有更好的 SMO/SqlCmd.exe 包装器?