一个子集相对于另一个子集的 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。
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;
我有一个很棒的大型赛事 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。
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;