1

我有一个很大的事件表,里面有很多不同类型的事件,我正在制作一个 New Relic 图表来显示一种事件与另一种事件的百分比。(不是表中总行数的百分比)。

所以在这个例子中的段表中:

id  name
1   foo      
2   bar
3   baz
4   bar

我会通过这样的查询获取 foo 事件:

select count(*) from Segment where name='foo'

我的问题:如何获得 foo 事件与 bar 事件的百分比?我一直在尝试加入两个将每个“保存为”特定名称的查询,但还没有运气。有谁知道我们是否/如何制作通用表表达式以在查询/图表中使用?

4

3 回答 3

3

您可以使用条件聚合:

select (sum(case when name = 'foo' then 1.0 else 0 end) /
        sum(case when name = 'bar' then 1.0 else 0 end)
       ) as foo_bar_ratio
from segment;

编辑:

也许这将在 NRLQ 中起作用:

select filter(count(*), where name = 'foo') / filter (count(*), where name = 'bar') as foo_bar_ratio
from segment;
于 2020-08-17T20:53:42.810 回答
0

您可以使用 PIVOT,这应该可以在 oracle 和 mssql 中使用,但不确定 NRQL。

演示

select (FOO_COUNTER/BAR_COUNTER) * 100 from  (
select * from table1
pivot(count(id) as counter for name in ('foo' foo, 'bar' bar))) x;
于 2020-08-17T19:48:07.310 回答
0

要使用 ctes,您需要引用它两次。一个为绿色值,一个为红色值。例如(第一个是加载数据):


with mock as (select * from (values (1, 'red'), (2, 'green'), (3, 'blue'), (4, 'green')) as mock(id, color)),
     aggregated as (
         select count(*), color
         from mock
         group by color
     )

select ag1.count::float / ag2.count::float, ag1.color
from aggregated ag1,
     aggregated ag2
where ag2.color = 'green'

我在这里使用 postgres

于 2020-08-17T19:08:19.540 回答