having子句中的SQL除法问题
当我试图这样做的时候having子句中的SQL除法问题,sql,oracle,Sql,Oracle,当我试图这样做的时候 select first_name from employees group by salary,first_name having salary between 0 and 4800 我有49张唱片 当我尝试这样做时,我没有得到任何结果 select first_name from employees group by salary,first_name having salary between 0 and (max(salary)/5) 此处从员工回执中选择最
select first_name from employees
group by salary,first_name
having salary between 0 and 4800
我有49张唱片
当我尝试这样做时,我没有得到任何结果
select first_name from employees
group by salary,first_name
having salary between 0 and (max(salary)/5)
此处从员工回执中选择最高(工资)/5
:4800
这很简单,但我不知道我在这句话中犯了什么愚蠢的错误
select first_name from employees
group by salary,first_name
having salary between 0 and (max(salary)/5)
你是按薪水和名字分组的,很可能只按一行分组。您实际上是在寻找介于0和X/5之间的X,这可能不会返回任何结果
在这份声明中
select max(salary)/5 from employees fetches
你什么都没有分组,所以你得到了每个人的最高工资
我觉得这个
select first_name from employees
WHERE salary between 0 and (SELECT max(salary) FROM employees)/5
是您要查找的内容您不能在where子句中使用聚合函数 使用以下命令:
select first_name from employees
group by salary,first_name
having salary between 0 and (SELECT max(salary)/5 from employees)
我将使用子查询来避免第二次传递数据:
select first_name
from (select first_name
,salary
,max(salary) over () max_salary
from employees)
where salary between 0 and max_salary/5
group by salary,first_name;
虽然我不知道你为什么要按薪水和名字分组。no no@Cdeez,你错了,我们可以在having子句中使用聚合函数。@ankit5607san:哦,很抱歉弄错了。我的答案适用于where子句。我明白你的意思,但是如果你不喜欢使用子查询,我应该如何在不使用嵌套查询的情况下使用with子句中的子查询来增加可读性。