【问题标题】:SQL use comparison operator on aggregate functionSQL 在聚合函数上使用比较运算符
【发布时间】:2021-09-09 20:40:09
【问题描述】:

我正在努力获取所有销量超过 100000 的人的emp_id

此查询返回所有员工及其销售额:

SELECT SUM(total_sales), emp_id 
FROM works_with
GROUP BY emp_id;

这样的事情是行不通的:

SELECT emp_id 
FROM works_with
WHERE SUM(total_sales), emp_id
GROUP BY emp_id > 100000;

我需要使用嵌套查询吗?

【问题讨论】:

  • SQL 解析器无法猜测emp_id > 100000 的含义。直接阅读本文并想象自己是一个 DBMS:它是否应该按评估条件分组(所有true 转到一个组,所有false 转到另一个组),它是否应该按emp_id 分组,然后只选择那些谁的 id 大于 10000?如果有另一个聚合函数,它如何发现它需要过滤掉求和的total_sales? “如果我是 DBMS 会怎样”是解决很多问题的一个很好的起点

标签: sql oracle group-by aggregation


【解决方案1】:

对于此解决方案,您需要按 emp_id 对数据进行分组,然后使用 group by 您需要使用 having 子句而不是 where 子句来过滤具有以下条件 SUM(total_sales)>100000 的数据。

因此,您的第一个查询是完美的。您只需添加having SUM(total_sales)>100000 即可。

SELECT emp_id 
FROM works_with 
GROUP BY emp_id 
having SUM(total_sales)>100000;

【讨论】:

  • 如果此答案对您有帮助,请点击绿色对勾接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 2020-09-24
  • 2011-11-24
  • 1970-01-01
  • 2012-01-11
相关资源
最近更新 更多