sql - 重复值的密集排名
问题描述
id val dense_rank
1 11 => 1
2 11 1
3 22 2
4 33 3
5 33 3
6 11 4
获得这种dense_rank应该喜欢什么sql?
解决方案
用于lag()
计算前一个值是多少,然后是一个累积和:
select t.*,
count(*) filter (where prev_val is null or prev_val <> val) over (order by id) as dense_rank
from (select t.*, lag(val) over (order by id) as prev_val
from t
) t;
这是一个 db<>fiddle。
推荐阅读
- ios - 通过 HTTP/2 下载时 iOS 中的 SETTINGS_MAX_CONCURRENT_STREAMS
- web-services - 哪一个是同步通信或异步通信?为什么?
- batch-file - 使用批处理文件复制子目录中的文件
- sql-server - 如何在sql中生成随机数?
- php - Laravel:无法在刀片中使用 Carbon diffForHumans
- reactjs - 简单的 React Hello World 实现
- javascript - 如何解决离子未捕获错误:找不到模块“。” 添加新页面时?
- powershell - 在powershell中,我需要从字符串中拆分并提取全球网络发布服务“资源全球发布服务不可用
- python - Python将带有空单元格的矩阵样式字符串解析为二维列表
- android - 使用 adb 获取 android 设备的芯片名称?