我有一个简单的查询,比如这个
select duration, host from Jobs
group by host;
我希望它实际上由一个主机池分组,这是需要在查询时定义的东西
例如,host01-10将是pool1,host11-20将是pool2等等。目前,没有一个字段说明它所在的池,但它需要从主机字段派生。
我如何实现这一目标?我希望能够在幻灯片上创建某种功能,以便对该字段进行操作,以便它可以分组
def get_pool(host):
if get_hostnumber(host) < 10:
return 'pool1'
elif:
...
select duration, get_pool(host) from Jobs
group by get_pool(host);
答案 0 :(得分:1)
在SQL中,您不需要为此功能。我建议只使用case
表达式:
select (case when host <= 'host10' then 'pool1'
when host <= 'host20' then 'pool2'
. . .
end) as hostgrp, sum(duration) as duration
from jobs
group by (case when host <= 'host10' then 'pool1'
when host <= 'host20' then 'pool2'
. . .
end);
对于您的特定示例,您可以逃脱:
select 'pool' || floor( (cast(substr(host, 5, 6) as number) + 1) / 10),
sum(duration) as duration
from jobs
group by 'pool' || floor( (cast(substr(host, 5, 6) as number) + 1) / 10);
而且,为了忘记,我在主机及其组之间有永久映射,那么您应该在数据库中放置一个hosts
引用表,并为该组添加第二列。然后,此查询将只使用join
,您编写的任何其他查询都将具有相同的信息。
答案 1 :(得分:1)
您可以在选择和分组中使用案例:
fitfuncvx = lambda p, x: p[2]+p[0]*np.exp(-x/p[1])
errfuncvx = lambda p, x, y: y - fitfuncvx(p, x)
sig_fit=np.where(Sig<12)
pinit = [1, 100,0.1]
pfinal, success = optimize.leastsq(errfuncvx, pinit[:], args=(Sig[sig_fit], vx[sig_fit]))