我有一个列,其中包含对列的SQL查询。这些都是在名为Select_analysis的函数上实现的
表格:
Select_analysis (in_file, out_file, {where_clause})它用于简单的查询并接收up until where子句。
示例:
像Select from roads where roads.width = 1这样的查询
显示为:
Select_analysis(roads.shp,r_width_1m.shp, width = '1')现在来看实际问题:在包含查询的字段中,有些查询包含group by和having语句。
你能建议一种方法来简化这个过程,这样它就可以和那个Select_analysis函数一起使用吗?
示例:
SELECT * from OT -- OT is a dataset
GROUP BY OT.CA -- CA is a number that may exist many times.Therefore we group by that field.
HAVING ((Count(OT.OBJECTID))>1) -- an id that appears more than once.OT数据集
objectid CA
1 125
2 342
3 263
1 125我们按CA分组。
关于having:它应用于具有多次objectid的行。它是本例中的objectid 1。
我的想法是创建另一个列,该列将存储将通过select_analysis函数中的一个简单where子句访问的结果
示例: OT数据集
objectid CA count_of_objid_aftergroupby
1 125 2
2 342 1
3 263 1
1 125 21)我们创建了一个包含查询要求的新列
2)我们只需在select_analysis中添加“where count_of_objid_aftergroupby>1”即可。
你认为如何?
指向函数文档http://pro.arcgis.com/en/pro-app/tool-reference/analysis/select.htm的链接
发布于 2018-11-01 23:27:30
这个问题的答案可能取决于您特定的SQL实现,但从根本上说,您的问题是在处理聚合函数时尽量避免使用“having”。“having”子句类似于where子句,但在聚合步骤之后进行处理。
所以我不认为你会找到一个“简化成没有额外结构的Where子句”的答案。
我建议在到达需要HAVING子句的部分之前,通过创建进行聚合的视图来避免这个问题。如果你提前申请了having条款,你会过得更好。
创建一个额外的列意味着你需要维护它。创建一个视图意味着你需要维护它。每次维护额外的列时,您都会更改一堆数据,而更改视图意味着更改代码。根据您的环境,其中一个可能比另一个更可取,但在大多数情况下,我更喜欢视图。更改数据通常不如更改代码可靠。
我不知道sqlalchemy是如何与视图交互的,您可能需要直接在数据库中创建这些视图。我认为这样做会更容易些。
如果你绝对不能使用数据库来创建视图,我相信ArcPy可以。
http://desktop.arcgis.com/en/arcmap/10.3/tools/data-management-toolbox/create-database-view.htm
and查询
arcpy.CreateDatabaseView_management("c:/Connections/city_data.sde","trees","select objectid, owner, parcel from inventory where type = trees")是该页面中的示例,您可以将SQL查询插入其中。
https://stackoverflow.com/questions/53103840
复制相似问题