代码之家  ›  专栏  ›  技术社区  ›  J. Taylor

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

  •  1
  • J. Taylor  · 技术社区  · 7 年前

    我正在使用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

    问题是,一些较大的包裹被拆分为多个具有不同 对象\u ID 但都一样 包裹编号 ,则, 总英亩 ,则, TOTAL\u值 等。例如,在下面的地图中,所有黄色高亮显示的区域实际上是一个大地块 包裹编号 ,但在数据库中被分成几十个较小的地图对象(红色选定区域是其中一个具有相同 包裹编号 与其他黄色要素一样,每个要素包含相同的属性值(地块编号=12806410000,总英亩=929,所有者=常青州立学院等):

    enter image description here

    因此,当我运行上述查询时,总和会对这些对象进行计数,使929英亩的地块登记为20000多英亩(因为它对每个记录计数一次,而不是对每个地块编号计数一次)。我如何构造这些查询,以便每个地块的值只按总和计数一次?

    谢谢

    1 回复  |  直到 7 年前
        1
  •  3
  •   jose_bacoy    7 年前

    使用子查询删除重复项,将其转换为唯一地块、所有者、总英亩和总价值。这个子查询将是您的新表,然后像往常一样运行您的查询。

    例如:

    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\u acre执行类似的查询。