Sql server 带有返回重复最小值的GROUP BY的SQL子查询。外部查询如何解释这一点?
我正在处理一些子查询问题,下面提供了代码作为答案 我的问题: 如果内部查询返回两个相同但属于不同部门的最低工资。外部查询将如何解释这一点?它是否承认工资是指不同的部门Sql server 带有返回重复最小值的GROUP BY的SQL子查询。外部查询如何解释这一点?,sql-server,subquery,Sql Server,Subquery,我正在处理一些子查询问题,下面提供了代码作为答案 我的问题: 如果内部查询返回两个相同但属于不同部门的最低工资。外部查询将如何解释这一点?它是否承认工资是指不同的部门 SELECT first_name, last_name, salary, department_id FROM employees WHERE salary IN ( SELECT MIN(salary) FROM employees GROUP BY department_id ); 谢谢不,它对部门信息一无所知。您
SELECT first_name, last_name, salary, department_id
FROM employees
WHERE salary IN ( SELECT MIN(salary)
FROM employees
GROUP BY department_id );
谢谢不,它对部门信息一无所知。您需要将中的更改为联接:
SELECT e.first_name, e.last_name, e.salary, e.department_id
FROM employees e
INNER JOIN ( SELECT department_id,IN(salary) AS salary
FROM employees
GROUP BY department_id) s
ON s.department_id=e.department_id
AND s.salary=e.salary;
在当前编写的报表中,它将显示employees表中的每条记录,这些记录将每个部门的最低工资与工资本身相匹配。因此,外部查询不知道有关部门id的任何信息,这意味着内部查询的属性与外部查询之间根本没有关联。您需要更改您的逻辑,例如连接以实现此目的。您可以使用
rank()
:
您可以向部门传递类似这样的附加信息/条件
CREATE TABLE employees (
empname VARCHAR(20)
,salary DECIMAL(18, 2)
,department_id INT
)
INSERT INTO employees
VALUES ('A', 100,1), ('B', 100, 2), ('C', 300, 2)
SELECT *
FROM employees
WHERE salary IN (
SELECT MIN(salary)
FROM employees
GROUP BY department_id
HAVING department_id = 2
)
AND department_id = 2;
这是输出
empname salary department_id
-----------------------------
B 100.00 2
虽然,
100.00
是A
和B
的最低工资,但您已经传递了部门id的信息:2
。因此,输出中只有B
。您的样本数据和预期输出是什么?嗨,苏拉杰,我正在尝试这个网页上的第3个问题。这不是你想要的。例如如果DeptA的最低工资是50k,那么它将以50k的工资回报所有员工,即使他们在不同的部门
empname salary department_id
-----------------------------
B 100.00 2