我有这个结构
10 loops, best of 3: 96.7 ms per loop
我有一些搜索参数:'深度'名称'水'等等
如何使用动态参数构建查询?例如,我想找到参数Depth>的点。 4,水是真的'
我认为应该是
%%timeit
df2 = dflarge.reset_index()
res = df2[df2['A']==df2['B']]
res.set_index(['A', 'B', 'C'], inplace=True)
如果我需要更多过滤器,它会变得笨重。
http://sqlfiddle.com/#!15/42ad2
谢谢!
答案 0 :(得分:0)
此解决方案使用Postgres 9.4中引入的函数json_object_agg(name, value)。
您可以使用此查询以json格式显示点参数:
select pnt_id, pnt_name, json_object_agg(prm_name::text, value) params
from points
join points_parameters using(pnt_id)
join parameters using (prm_id)
group by 1, 2
pnt_id | pnt_name | params
--------+----------+--------------------------------------------------------
1 | first | { "Depth" : "10", "Water" : "true", "Crane" : "true" }
(1 row)
因此,使用json格式使用任意参数集过滤数据:
select pnt_id, pnt_name
from (
select pnt_id, pnt_name, json_object_agg(prm_name::text, value) params
from points
join points_parameters using(pnt_id)
join parameters using (prm_id)
group by 1, 2
) s
where (params->>'Depth')::int > 4
and (params->>'Water')::boolean
pnt_id | pnt_name
--------+----------
1 | first
(1 row)