首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >修改SQL查询以避免出现?

修改SQL查询以避免出现?
EN

Stack Overflow用户
提问于 2018-11-01 22:58:19
回答 1查看 206关注 0票数 0

我有一个列,其中包含对列的SQL查询。这些都是在名为Select_analysis的函数上实现的

表格:

代码语言:javascript
运行
复制
Select_analysis (in_file, out_file, {where_clause})

它用于简单的查询并接收up until where子句。

示例:

Select from roads where roads.width = 1这样的查询

显示为:

代码语言:javascript
运行
复制
Select_analysis(roads.shp,r_width_1m.shp, width = '1')

现在来看实际问题:在包含查询的字段中,有些查询包含group byhaving语句。

你能建议一种方法来简化这个过程,这样它就可以和那个Select_analysis函数一起使用吗?

示例:

代码语言:javascript
运行
复制
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数据集

代码语言:javascript
运行
复制
objectid     CA
1            125
2            342
3            263
1            125

我们按CA分组。

关于having:它应用于具有多次objectid的行。它是本例中的objectid 1。

我的想法是创建另一个列,该列将存储将通过select_analysis函数中的一个简单where子句访问的结果

示例: OT数据集

代码语言:javascript
运行
复制
objectid     CA       count_of_objid_aftergroupby
1            125           2
2            342           1
3            263           1
1            125           2

1)我们创建了一个包含查询要求的新列

2)我们只需在select_analysis中添加“where count_of_objid_aftergroupby>1”即可。

你认为如何?

指向函数文档http://pro.arcgis.com/en/pro-app/tool-reference/analysis/select.htm的链接

EN

Stack Overflow用户

发布于 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查询

代码语言:javascript
运行
复制
arcpy.CreateDatabaseView_management("c:/Connections/city_data.sde","trees","select objectid, owner, parcel from inventory where type = trees")

是该页面中的示例,您可以将SQL查询插入其中。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53103840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档