使用QGIS字段计算器基于另一列计算列的总和?


16

我想根据另一列中的值计算一列中的值总和。为了说明我的问题,我上传了以下图片。第二列是邮政编码,第三列是总销售额。我想知道每个邮政编码的总销售额是多少?因此,在这种情况下:

第二列的值的第三列的总和是1023多少?输出应为4 (0+1+1+2+0)1024遵循相同的逻辑,则其总和应为11,5。

由于这是一个很大的数据集,因此我希望QGIS字段计算器(或任何其他工具)计算一个新字段,该字段以邮政编码表示总销售额。到目前为止,我似乎无法正常运行,希望这里有人可以帮助我。

如您所见,我缺少一些值,这是计算中的问题吗?也许值得一提的是它是一张桌子。

例


应该是3(0 + 1 + 1 + 2 + 0)?? 真?
user7172

Answers:


24

更新:QGIS 2.18(2017/07/07):

在“ 字段计算器”中,您可以使用“ 聚合”函数sum,该函数允许您基于表达式对列的值求和。您也可以选择对功能进行分组和过滤以求和。因此,在您的现场计算器中,您可以简单地使用:

sum( "Sum", "Sales")

与使用GroupStats插件的方法完全相同



原始帖子:2016年2月3日

使用GroupStats插件,您可能需要从Plugins> Manage and Install Plugins下载。

这是一个使用您显示的一些属性的示例层:

层

那么让我们:

  1. 运行GroupStats插件,选择用于求和的相关字段(Sales对于行;Sum对于值),然后单击Calculate。您应该看到显示每次销售总和的结果:

    GroupStats插件

  2. 从GroupStats工具栏将结果另存为.csv文件:

    导出到CSV

  3. 通过将.csv文件拖动到界面或从工具栏将其导入回QGIS:

    图层>添加图层>添加定界文本图层请注意,这些值以分号分隔

  4. 使用shapefile和.csv文件进行Joins,匹配Sales字段:

    加入

  5. shapefile现在应包含.csv文件中的总和值:

    结果

如果愿意,可以继续使用Save As...shapefile上的选项,并将其另存为新的选项,以保留联接的字段。


如果此答案的字段计算器组件包括对行进行分组和/或过滤的SQL行,将很有帮助。@Joseph
eyerah '18

@eyerah -表达sum( "Sum", "Sales")的用途"Sales"为一组过滤器,如果这是什么意思?
约瑟夫

1
哦。我现在知道了。这就是我的意思。谢谢。
eyerah '18

11

如果更新到最新的QGIS版本2.14,则可以使用虚拟层制作sql语句,例如:

SELECT "MYTABLE"."MYID", Sum("MYTABLE"."SALES")  AS zip_sale /*:int*/
FROM "MYTABLE"
GROUP BY "MYTABLE"."ZIPCODE"

用户界面如下所示:

在此处输入图片说明

您还可以使用数据库管理器,其中在sql按钮后面有一个查询生成器:

在此处输入图片说明

MYID列可用于将总销售额重新添加到主表中。联接选项卡位于表格属性下。

看看在QGIS视觉的changelogFeature: Virtual layers


6

一种实现方法如下:

  • 在属性表中,选择“按功能选择”。键入“ column-name” =1023。将选择所有值为1023的字段。
  • 转到矢量工具->分析工具->基本统计信息。选择您的图层和销售列。确保选中“仅选定值”复选框。总和将显示在结果窗口中。你必须把它写下来;)
  • 对每个邮政编码重复上述步骤

1
PS缺少值是没有问题的。
米龙

这是一种简单有效的方法。但是,如Ammar所述,在处理大型数据集时可能会非常耗时...
dru87'3
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.