SQL 按值的连续出现进行分组

标签 sql database oracle gaps-and-islands

我有下表,有 2 列

ID     |     Dept 

1      |    A    
2      |    A
3      |    B
4      |    B
5      |    B
6      |    A

我想做一个计数,输出应该如下表所示。

Dept   |     Count

A      |    2    
B      |    3
A      |    1

提前感谢您的帮助!

最佳答案

与 Michael 的略有不同,结果相同:

with cte1 as (
  select   id,
           dept,
           row_number() over (partition by dept order by id) - 
             row_number() over (order by id) group_num
  from     test),
cte2 as (
  select   dept,
           group_num,
           count(*) c_star,
           max(id) max_id
  from     cte1
  group by dept,
           group_num)
select   dept,
         c_star
from     cte2
order by max_id;

http://sqlfiddle.com/#!4/ff747/1

关于SQL 按值的连续出现进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32566685/

相关文章:

database - 在PostgreSQL中获取lobject的大小

android - 我可以拆分 SQLite 文件并在 Android 应用程序中重新创建/合并吗

oracle - 在 Amazon RDS 上导入 Oracle 转储

c# - 设计策略 : Query and Update data across 2 different databases

mysql - mysql中重复记录的编号

mysql - 如何更好地编码这个多重选择子查询(子查询)?

php - MySQL 查询不更新 PHP 数据库中的值

php - mysql 查询 3 个表 php 输出名称而不是 id

ruby-on-rails - rails 上的 ruby : Data base sqlite3 to PostgreSQL [RALS]

java - Oracle 查询调用形成 Java 持久性时的临时空间行为