SQL - 获取行的最小值并检查此最小值是否在行中至少 2 次
SQL - get MIN value of row and check this MIN value to be in row at least 2 times
我想要实现的是:
1) 获取 每个 部门的 table 薪水的最小值。
2) 如果对于每个个部门,这个最小值在table中至少存在两次次,然后显示它的部门id。
示例:
column1 name salary department_id
id1 John1 10000 1
id2 John2 10000 1
id3 John3 30000 2
id4 John4 30000 2
id5 John5 50000 3
id6 John6 20000 4
结果:
department_id
1
2
如果我没听错,你想要工资最低的部门。
这是一种使用 window 函数的方法,它通过比较 row_number()
和 rank()
来工作:
select distinct department_id
from (
select
t.*,
row_number() over(partition by department_id order by salary) rn,
rank() over(partition by department_id order by salary) rnk
from mytable t
) t
where rnk = 1 and rn > 1
如果我没理解错的话,你希望最低工资至少出现两次的部门。这让我觉得 window 函数:
select t.department_id
from (select t.*,
count(*) over (partition by department_id, salary) as cnt,
row_number() over (partition by department_id order by salary) as seqnum
from t
) t
where seqnum = 1 and cnt > 1;
请注意,您不需要 select distinct
,因为这样每个部门最多选择一行。
SELECT department_id
FROM Employee
WHERE Employee.salary = (select min(emp.salary) from Employee emp where emp.department_id = Employee.department_id)
GROUP BY department_id
HAVING COUNT(1) >=2
我想要实现的是:
1) 获取 每个 部门的 table 薪水的最小值。
2) 如果对于每个个部门,这个最小值在table中至少存在两次次,然后显示它的部门id。
示例:
column1 name salary department_id
id1 John1 10000 1
id2 John2 10000 1
id3 John3 30000 2
id4 John4 30000 2
id5 John5 50000 3
id6 John6 20000 4
结果:
department_id
1
2
如果我没听错,你想要工资最低的部门。
这是一种使用 window 函数的方法,它通过比较 row_number()
和 rank()
来工作:
select distinct department_id
from (
select
t.*,
row_number() over(partition by department_id order by salary) rn,
rank() over(partition by department_id order by salary) rnk
from mytable t
) t
where rnk = 1 and rn > 1
如果我没理解错的话,你希望最低工资至少出现两次的部门。这让我觉得 window 函数:
select t.department_id
from (select t.*,
count(*) over (partition by department_id, salary) as cnt,
row_number() over (partition by department_id order by salary) as seqnum
from t
) t
where seqnum = 1 and cnt > 1;
请注意,您不需要 select distinct
,因为这样每个部门最多选择一行。
SELECT department_id
FROM Employee
WHERE Employee.salary = (select min(emp.salary) from Employee emp where emp.department_id = Employee.department_id)
GROUP BY department_id
HAVING COUNT(1) >=2