sql - 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 的两列。我还在研究这个。任何建议表示赞赏
解决方案
如果您希望查看所有原始数据,则可以尝试这样做,但您确实需要对非聚合列进行分组:
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
推荐阅读
- python - 在 Python 中将操作链接到 winrt toast 通知
- python - MongoDB聚合加入2个字段不起作用
- java - Java I/O - 事务文件存储
- c# - Unity 文件加载失败:“System.Threading.Tasks.Dataflow”
- python - 创建每三个月拉回一次的循环,直到拉回 6 个月 - Python
- reactjs - Webpack 无法识别反应组件
- microsoft-graph-api - 用户如何从 Microsoft Graph 获得工作令牌?
- c# - IdentityServer4 混合 .NET Core 客户端和 OWIN 客户端 - 循环
- flutter - I/flutter (32524):“String”类型不是“index”的“int”类型的子类型
- java - 如何使用spring security和java在jwt json中传递角色或权限