一个子集相对于另一个子集的 NRQL 百分比

NRQL percentage of one subset over another

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

所以在这个例子中段table:

id  name
1   foo      
2   bar
3   baz
4   bar

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

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

我的问题:如何获得 foo 事件与 bar 事件的百分比?我一直在尝试加入两个查询,将每个查询“保存为”一个特定的名称,但还没有成功。有谁知道 if/how 我们可以制作通用 Table 表达式用于 query/graph?

要使用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

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

DEMO

select (FOO_COUNTER/BAR_COUNTER) * 100 from  (
select * from table1
pivot(count(id) as counter for name in ('foo' foo, 'bar' bar))) x;

您可以使用条件聚合:

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;