如何基于多个列添加条件计数

Impresario

我正在尝试总结看起来像这样的T-SQL输出:

+---------+---------+-----+-------+
| perf_no | section | row | seat  |
+---------+---------+-----+-------+
|    7128 |       6 | A   |     4 |
|    7128 |       6 | A   |     5 |
|    7128 |       6 | A   |     7 |
|    7128 |       6 | A   |     9 |
|    7128 |       6 | A   |    28 |
|    7129 |       6 | A   |    29 |
|    7129 |       6 | A   |     8 |
|    7129 |       6 | A   |     9 |
|    7129 |       8 | A   |     6 |
|    7129 |       8 | B   |     3 |
|    7129 |       8 | B   |     4 |
+---------+---------+-----+-------+

将一行与下面的行进行比较,如果perf_no,section和row值相同,并且席位值之间的差为1,那么我想将它们视为一组,并计算其中的行数该组。

为了给您一个真实的例子,这些都是剧院的座位!我正在尝试总结可用的座位。

使用上表说明:

  • 第1和2行显示了第6节第4行和第5排座位,性能7128可用。所以这是两个座位
  • 第3行显示sectino 6中的7,性能7128的第8行可单独使用。那是一个座位(1)
  • 第5和第6行具有相同的节和行,并且座位是连续的,但是您可以看到效果有所不同。所以这也是一个座位。

所以上表的输出看起来有点像...

(我已经留在了空格中,以便您可以更直观地看到分组-显然最终版本将没有分组)

+---------+---------+----------+-------+
| perf_no | section | seat_row | total |
+---------+---------+----------+-------+
|    7128 |       6 | A        |     2 |
|         |         |          |       |
|    7128 |       6 | A        |     1 |
|    7128 |       6 | A        |     1 |
|    7128 |       6 | A        |     1 |
|    7129 |       6 | A        |     1 |
|    7129 |       6 | A        |     2 |
|         |         |          |       |
|    7129 |       6 | A        |     1 |
|    7129 |       8 | B        |     2 |
+---------+---------+----------+-------+

我一直在尝试使用一些条件案例语句,但没有多大用处。非常感谢收到任何帮助!

戈登·利诺夫

这是一种“空白与孤岛”的问题。您可以通过row_number()从中减去序列(由生成来生成分组seat

select perf_no, section, row, count(*) as num_seats,
       min(seat) as first_seat, max(seat) as last_seat
from (select t.*,
             row_number() over (partition by perf_no, section, row order by seat) as seqnum
      from t
     ) t
group by perf_no, section, row, (seat - seqnum);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用熊猫基于多个列条件对行进行计数?

基于多个条件添加新列

基于多个条件的熊猫计数,导致新列

如何基于DataFrame中的多个条件对事件进行计数

添加条件计数器:基于其他列的值的计数器列

如何获得基于多个列值的不同行组合的计数?

如何基于SQL Server中的多个列进行计数?

Pandas DataFrame基于多个条件的分组添加新的列值

如何基于列值熊猫添加到计数

如何基于多个条件语句创建多个新列?

如何基于多个列的条件在Pandas中创建列总和?

基于多个条件的新列

如何基于R中的多个条件创建新列?

满足多个条件时如何基于特定列获取记录

如何在r中基于多个条件创建列?

如何基于多个条件选择/计算列中的行

如何基于多个先前值的熊猫条件计算新列

我如何基于R中的条件添加列

SSIS包-基于多个列的计数

如何基于过滤条件而不是dplyr中的分组添加计数列?

基于匹配多个数据集的多个条件和日期范围添加列

如何基于R数据框中的多个列条件创建基于排名的列

如何在SELECT查询中基于几个列添加计数器ID列

在R中,如何基于另一列添加计数为0/1的多列?

R中是否有基于多个条件的计数功能?

使用 mutate() 在 tidy R grep 中添加基于多个条件的列

如何为单个列添加多个条件?

Pandas - 如何向数据框添加多个条件列?

如何基于检查多个列的多个值来有条件地编码新变量