Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
having子句中的SQL除法问题_Sql_Oracle - Fatal编程技术网

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子句中的子查询来增加可读性。