首页 > 解决方案 > SQL Server 中的 Group By 和 JOIN(处理多列时)

问题描述

我有 2 个表,df1 和 df2。我想加入这两个表,然后执行 GROUP BY 聚合。我不断收到一条错误消息,指出聚合函数中不包含这些列。

数据:

df1

host    purpose verge   name    date
123     sub     hello   hello1  1/1/2021
123     sub     peace   peace1  1/1/2021
123     sub     love    love1   1/1/2021
123     sub     hey     hey1    1/1/2021
455     dem     no      no1     1/1/2021
455     dem     corp    corp1   1/1/2021

df2

pc  cap free
123 10  2
123 20  1
123 10  2
123 5   1
455 5   1
455 4   3

期望的

host    date        pc  cap free purpose 
123     1/1/2021    123 45  6    sub     
455     1/1/2021    455 9   4    dem

正在做

SELECT df1.host, 
       df1.date, 
       df2.sum(cap),
       df2.sum(free), 
       df1.purpose,
       df2.pc
FROM   df1
       JOIN df2 ON
       df1.host = df2.pc
       GROUP BY df1.purpose

我收到此错误:

列在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中

但是,我已经聚合了 cap 和 free 的两列。我还在研究这个。任何建议表示赞赏

标签: sqlsql-server

解决方案


如果您希望查看所有原始数据,则可以尝试这样做,但您确实需要对非聚合列进行分组:

SELECT df1.host, 
       df1.date, 
       Sum(df2.cap) over (partition by df1.purpose),
       Sum(df2.free) over (partition by df1.purpose),
       df1.purpose,
       df2.pc
FROM   df1
JOIN df2 ON
       df1.host = df2.pc

https://docs.microsoft.com/en-us/sql/t-sql/queries/select-over-clause-transact-sql?view=sql-server-ver15


推荐阅读