1

我正在尝试编写一个函数来聚合一个非常大的 Sybase IQ 表中的一些文本数据列。我无法更改所提供数据的格式。

每行代表一个有点像测试的过程的值。键是非唯一的,值也是文本字符串,只有“通过”或“失败”。

在实际表中可能有多个“值”列 - 但为简洁起见,我只显示了一个。

规则是,如果所有内容都通过了密钥,那么它就是通过。否则就是失败。在一个理想的世界中,我希望能够编写一个有点像的聚合函数:

count(all(mytable.value == 'pass'))

以下是数据示例:

| Key | Value | 
| A   | fail  |
| A   | pass  |
| B   | pass  |
| B   | pass  |
| B   | pass  |
| C   | fail  |
| C   | fail  |

聚合数据如下所示:

| Key | Value |
| A   | fail  |
| B   | pass  |
| C   | fail  |

那么有没有一种优雅的方法来做到这一点?

仅供参考,Sybase IQ - 不是普通的 Sybase!;-)

4

2 回答 2

2

这似乎是最简单的解决方案......

select
  key
  ,sum(case when value = 'pass' then 1 else 0 end) as num_passed
  ,count(*) as num_tests
from mytable
group by key
having num_tests = num_passed
于 2013-11-12T17:57:34.540 回答
2

我不知道 Sybase-IQ,但使用标准 SQL,您可以这样做:

select key, min(value) as value
from mytable
group by key
having sum(case when value = 'pass' then 1 else 0 end) = count(value)
    or sum(case when value = 'fail' then 1 else 0 end) = count(value);

或使用 damien 的建议:

select key, min(value)
from mytable
group by key
having min(value) = max(value)
于 2013-11-11T15:36:08.270 回答