我正在使用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_NO
,TOTAL_ACRE
,TOTAL_VALUE
等。例如,在下面的地图中,所有黄色突出显示的区域实际上是一个包含单个PARCEL_NO
的大包裹,但在数据库中被划分为数十个较小的地图对象(红色选定区域是其中一个具有相同的PARCEL_NO
作为其他黄色特征),每个都包含相同的属性值(PARCEL_NO = 12806410000,TOTAL_ACRE = 929,OWNER = EVERGREEN STATE COLLEGE等):
因此,当我运行上述查询时,SUM计算这些对象中的每一个,使这个929英亩的地块注册为20,000英亩(因为每个记录计算一次,而不是每个包裹数一次。我构造这些查询,以便每个PARCEL_NO的值仅由SUM?
计算一次谢谢!
答案 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执行类似的查询。