Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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
Mysql 在HAVING和WHERE子句之间使用OR运算符的Sql查询_Mysql_Sql_Database - Fatal编程技术网

Mysql 在HAVING和WHERE子句之间使用OR运算符的Sql查询

Mysql 在HAVING和WHERE子句之间使用OR运算符的Sql查询,mysql,sql,database,Mysql,Sql,Database,是否可以在单个SQL查询中组合OR运算符中的having子句和where子句 也许不是最好的例子,但你会想到: 从员工表中选择使用where子句的人力资源部门或使用having子句向所有超过25000名员工支付工资的部门。 那么我们如何在下面的查询中获得OR条件呢?或者最好将查询分为两个查询 SELECT dept, SUM (salary) FROM employee WHERE dept = "HR" GROUP BY dept HAVING SUM (salary) > 250

是否可以在单个SQL查询中组合OR运算符中的having子句和where子句

也许不是最好的例子,但你会想到:

从员工表中选择使用where子句的人力资源部门或使用having子句向所有超过25000名员工支付工资的部门。 那么我们如何在下面的查询中获得OR条件呢?或者最好将查询分为两个查询

SELECT dept, SUM (salary) 
FROM employee 
WHERE dept = "HR"
GROUP BY dept 
HAVING SUM (salary) > 25000

下面的方法可行-您不必在HAVING子句中指定聚合

SELECT dept, SUM (salary) 
FROM employee 
GROUP BY dept 
HAVING dept = "HR" or SUM (salary) > 25000
但你的声明是,支付所有员工超过25000美元,这一点并不清楚。你想要什么

所有员工人均收入超过25000英镑的部门,或 所有员工总收入超过25000英镑的部门

上面的查询提供了第二个选项,因为它最接近原始查询

在派生表中按部分包装组。然后将条件应用于其结果:

select dept, salarysum
from
(
    SELECT dept, SUM (salary) as salarysum
    FROM employee 
    GROUP BY dept
) dt
where salarysum > 25000 or dept = "HR"
或者,也许,所有员工的工资都超过25000美元,这意味着部门员工的工资都不低于25000美元

select dept, minsalary
from
(
    SELECT dept, MIN(salary) as minsalary
    FROM employee 
    GROUP BY dept
) dt
where minsalary > 25000 or dept = "HR"

也许你想要一个工资都超过25000英镑的部门

drop table if exists employees;
create table employees(id int auto_increment primary key, dept varchar(2), salary int);

insert into employees (dept,salary)
values
('HR',10000),('aa',10000),('aa',45000),('bb',25000),('cc',26000),('cc',26000);

select dept,sum(salary) sumsalary,count(*) obs, sum(case when salary > 25000 then 1 else 0 end) over25000
from employees
group by dept having obs = over25000 or dept = 'hr'

+------+-----------+-----+-----------+
| dept | sumsalary | obs | over25000 |
+------+-----------+-----+-----------+
| cc   |     52000 |   2 |         2 |
| HR   |     10000 |   1 |         0 |
+------+-----------+-----+-----------+
2 rows in set (0.01 sec)

只要放置在having子句中的列是select查询的一部分,就可以在where子句中放置多个条件。