创建视图并对列值进行求和

Posted

技术标签:

【中文标题】创建视图并对列值进行求和【英文标题】:Create view and make SUM of column values 【发布时间】:2021-04-28 18:40:02 【问题描述】:

我在 SQL Server 中有两个表(A 和 B)。我想在 NameA 上创建一个带有联合或溶解的视图,其中包含计数总和和几何形状。

结果应该是这样的:

nameC ogr_geometry SUM_count
main1 GEOMETRY 4
main2 GEOMETRY 2
main3 GEOMETRY 2

tableA

nameA Count
main1 1
main1 1
main1 1
main1 1
main3 1
main3 1
main2 1
main2 1

表B

nameB ogr_geometry
main1 GEOMETRY
main2 GEOMETRY
main3 GEOMETRY

我试过了:

CREATE or ALTER VIEW SUM_main
AS 
    SELECT 
        SUM(Count) AS SUM_count,
        TableB.ogr_geometry
    FROM 
        TableA
    INNER JOIN 
        TableB ON TableA.nameA = TableB.nameB
    GROUP BY
        TableA.nameA

它不起作用。

有效,但没有几何或名称,但似乎做了 SUM:

CREATE or ALTER VIEW SUM_main
AS 
    SELECT SUM(Count) AS SUM_count
    FROM TableA
    INNER JOIN tableB ON tableA.nameA = tableB.nameB
    GROUP by tableA.nameA
SUM_count
1 4
2 2
3 2

如何获取名称和几何图形?

【问题讨论】:

“invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause” 有点告诉你问题 【参考方案1】:

SELECT 中的非聚合列必须是 GROUP BY 列的相同或子集。由于几何类型不可比较,它不能在GROUP BY 列之间。分两步完成

SELECT ta.*, TableB.ogr_geometry
FROM (
     SELECT nameA, SUM(Count) AS SUM_count
     FROM TableA
     GROUP BY nameA ) ta
INNER JOIN tableB ON ta.nameA = tableB.nameB
    

【讨论】:

这给了我““几何”类型不可比较。它不能在 GROUP BY 子句中使用。” 提供 CREATE TABLE 以使数据类型对社区可见。请参阅编辑后的答案。【参考方案2】:

需要对ogr_geometry 列应用聚合。由于它不是 GROUP BY 列之一,SQL 正试图以某种方式跨组聚合它。

如果ogr_geometry 具有可比性,那么您可以执行以下操作:

SELECT tableA.nameA
    , SUM(count) AS count
    , MIN(tableB.ogr_geometry) AS geometry
FROM tableA
INNER JOIN tableB ON tableA.nameA=tableB.nameB
GROUP by tableA.nameA

如果不是,因为ogr_geometry实际上是几何类型,你需要先对tableA进行聚合,然后再与tableB进行join:

SELECT tableA.nameA
    , tableB.ogr_geometry
    , tableA.count
FROM (
    SELECT nameA
        , SUM(count) AS count
    FROM tableA
    GROUP BY nameA
) tableA
INNER JOIN tableB ON tableA.nameA=tableB.nameB

【讨论】:

这给了我“操作数数据类型几何对 min 运算符无效。” 查看更新的答案,从您的原始问题中不清楚您正在使用的类型,但应该这样做。

以上是关于创建视图并对列值进行求和的主要内容,如果未能解决你的问题,请参考以下文章

SonataAdminBundle 如何在列表视图中对列的值求和

使用 sqlbulktools 更新表时对列值求和

根据可变日期范围(impala)在窗口上对列值求和

基于一周范围的窗口对列值求和(黑斑羚)

基于多索引对列值求和

使用相同的 ID 列递增地对列值求和