SQLite - 使用总计生成表,但从SUM中排除重复的条目

时间:2018-03-18 22:42:31

标签: sql sqlite

我正在使用SQLite空间数据库,该数据库包含该县所有宗地的财产所有权信息。除其他外,它包含地块编号(PARCEL_NO),面积(TOTAL_ACRE),属性值(TOTAL_VALUE)和所有者(OWNER)的字段。每条记录都有一个名为OBJECT_ID的主键。

我正在尝试生成该县所有业主的排序(降序)列表,按他们拥有的财产数量排列,以英亩和美元计算。

我尝试了两个查询来获取此信息:

SELECT OWNER, SUM(TOTAL_VALUE) FROM thurstonparcelsowners GROUP BY OWNER ORDER BY SUM(TOTAL_VALUE) DESC

SELECT OWNER, SUM(TOTAL_ACRE) FROM thurstonparcelsowners GROUP BY OWNER ORDER BY SUM(TOTAL_ACRE) DESC

问题在于,一些较大的宗地被分解为多个单独的记录,这些记录具有不同的OBJECT_ID但相同的PARCEL_NOTOTAL_ACRETOTAL_VALUE等。例如,在下面的地图中,所有黄色突出显示的区域实际上是一个包含单个PARCEL_NO的大包裹,但在数据库中被划分为数十个较小的地图对象(红色选定区域是其中一个具有相同的PARCEL_NO作为其他黄色特征),每个都包含相同的属性值(PARCEL_NO = 12806410000,TOTAL_ACRE = 929,OWNER = EVERGREEN STATE COLLEGE等):

enter image description here

因此,当我运行上述查询时,SUM计算这些对象中的每一个,使这个929英亩的地块注册为20,000英亩(因为每个记录计算一次,而不是每个包裹数一次。我构造这些查询,以便每个PARCEL_NO的值仅由SUM?

计算一次

谢谢!

1 个答案:

答案 0 :(得分:2)

使用子查询删除重复项,将其转换为唯一的宗地,所有者,总英亩和总价值。此子查询将是您的新表,然后照常运行您的查询。

例如:

SELECT OWNER, SUM(TOTAL_VALUE) 
FROM  (
     SELECT DISTINCT PARCEL_NO, TOTAL_VALUE, OWNER
       FROM thurstonparcelsowners
      ) t
GROUP BY OWNER 
ORDER BY SUM(TOTAL_VALUE) DESC;

您可以对total_acre执行类似的查询。