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