sql - 聚合可能不会出现在 WHERE 子句中,除非它位于 HAVING 子句中包含的子查询中
问题描述
我正在尝试构建一个查询,该查询对同一 ID 的两个不同字段进行分组和求和。然后我试图只提取分组总数与总和不同的不同记录。
例如 - sum([EstimatedEmployeesAtLocation]) 应该等于分组的 Estimatedtotalemployees 对于每条记录都是相同的。
这就是三个记录的样子
ID 1,1,1
Estimatedtotalemployees 10,10,10
EstimatedEmployeesAtLocation 6,2,1
我知道问题在于在 where 子句中使用聚合函数,因为查询一直有效,直到我添加 where 子句。但我不知道正确的语法。有人可以建议吗?
select ID, Estimatedtotalemployees, sum([EstimatedEmployeesAtLocation]) emploc
from Rawdata
where sum([EstimatedEmployeesAtLocation]) <> EstimatedTotalEmployees
group by policyNumber, EstimatedTotalEmployees
这是错误消息。聚合可能不会出现在 WHERE 子句中,除非它位于 HAVING 子句或选择列表中包含的子查询中,并且正在聚合的列是外部引用。我刚刚开始在基本查询之外使用 SQL,因此非常感谢任何帮助 -
解决方案
SQL 的评估顺序大致如下:
- FROM - 数据已连接
- WHERE - 过滤数据
- GROUP BY - 聚合数据
- SELECT - 生成结果集
您不能在 WHERE 子句中使用 SUM(...) ,因为它尚未计算;它是作为 GROUP BY 和 SELECT 的一部分完成的
您的选择列表中也不能有 ID,因为您没有按它分组。
您最好提出一个新问题/在此问题中编辑一些细节,以列出您拥有的原始数据(并将其放在顶部的列,向下的行,就像 SSMS 向您显示的那样),您尝试过的(例如上面的 sql),以及您想要的结果是什么(同样,行水平运行,列垂直运行,否则最终会有人给你一个支点)。现在您似乎已经提供了原始数据,但已将其标记为结果数据,并且看起来方向错误,所以我不确定它是否需要旋转
这是我对你所追求的最好的尝试:
select ID, MAX(Estimatedtotalemployees), SUM([EstimatedEmployeesAtLocation])
from Rawdata
group by ID
having SUM([EstimatedEmployeesAtLocation]) <> MAX(EstimatedTotalEmployees)
推荐阅读
- databricks - 有没有办法在 Databrick 笔记本中的某个单元格之后运行/执行单元格?
- java - 如何检查数组列表或集合中的包含
- javascript - 为什么它总是返回 true?
- javascript - 当我使用 python 运行烧瓶应用程序以在 web ui 上绘制图形时出现错误
- c# - 与 WebClient 并行上传文件
- matlab - 如何从 Sublime 中获取 .m 文件以正确保存并在 Matlab 编辑器中工作
- python - 如何使用 lxml 删除所有 XML 标记并去除空格?
- kubernetes-ingress - 路径中具有命名捕获组的 Ingress-Nginx 正则表达式路由规则
- nosql - Oracle NoSQL 数据库索引扫描:如何建立边界
- vba - 如何创建字体对象vba