[英]Sql query with an OR operator between a HAVING and WHERE clause
是否可以在單個SQL查詢中將OR運算符中的hading和where子句組合在一起?
也許不是最好的例子,但是您會明白的:
從員工表中選擇部門,這些部門是HR(使用where子句)或支付給所有員工25000以上的工資(使用hading子句)。 那么,如何在下面的查詢中獲得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的部門?
上面的查詢為您提供了第二個選項,因為它與原始查詢最接近
將GROUP BY
部分包裝在派生表中。 然后將條件應用於其結果:
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.