选择所有工资相同的人

问题描述 投票:0回答:15

我在寻找 SQL 查询的解决方案时遇到问题。这可能是一个非常明显的初学者问题,但我似乎无法得到我想要的结果。我有一张如下所示的表格:

|Name |Station|Salary|
|Bob  |1      |2000  |
|Steve|2      |1750  |
|Mark |3      |2050  |
|Lisa |4      |2200  |
|Hans |5      |2000  |

我想选择此表中具有相同薪水的人员姓名。结果当然应该是BobHans

sql select equals
15个回答
13
投票

如果您在“薪资”上加入表格,但姓名是分开的,那么这应该会为您提供任何匹配的受薪人员:

SELECT s1.Name, s1.Station, s1.Salary
FROM Staff s1
INNER JOIN Staff s2 ON s1.Salary = s2.Salary AND s1.Name <> s2.Name

这是一个 SQLFiddle 来展示它的实际效果


9
投票
SELECT Name
FROM table1 
WHERE Salary IN (
    SELECT Salary
    FROM table1
    GROUP BY Salary
    HAVING COUNT(*) > 1
)

4
投票

如果您确定有多名员工的薪资范围,您可以将其作为派生表连接回:

SELECT e.Name, e.Station 
FROM Employee e
INNER JOIN
(
   SELECT Salary
   FROM Employee
   GROUP BY Salary
   HAVING COUNT(*) > 1
) grp ON e.Salary = grp.Salary;

SqlFiddle 在这里


2
投票

大多数数据库都支持窗口函数。执行此操作的简单方法是计算拥有给定工资的人数。然后选择那些人。这是一个简单的方法:

select t.*
from (select t.*, count(*) over (partition by salary) as salarycnt
      from table t
     ) t
where salarycnt > 1
order by salary;

2
投票

试试这个:

SELECT E1.Name, E1.Salary
FROM Employee E1, Employee E2
WHERE E1.Salary = E2.Salary
AND E1.Name <> E2.Name

http://sqlfiddle.com/#!2/1e34b


1
投票

使用以下查询:

with datatab as
(
 select 'Bob' Name,   1 Station, 2000  Salary from dual union
 select 'Steve' Name,   2 Station, 1750  Salary from dual union
 select 'Mark' Name,   3 Station, 2050  Salary from dual union
 select 'Lisa' Name,   4 Station, 2200  Salary from dual union
 select 'Hans' Name,   5 Station, 2000  Salary from dual union
 select 'Test' Name,   6 Station, 1750  Salary from dual
)

SELECT NAME, sTATION, SALARY  FROM DATATAB
WHERE SALARY IN 
(
   SELECT Salary
   FROM datatab
   GROUP BY Salary
   HAVING COUNT(1) > 1
);

正如有人在编辑中建议的那样,查询将是:

SELECT NAME, sTATION, SALARY  FROM TABLE_NAME
WHERE SALARY IN 
(
   SELECT Salary
   FROM TABLE_NAME
   GROUP BY Salary
   HAVING COUNT(1) > 1
)

0
投票

选择a.姓名、a.薪水 ( 选择 count(salary) 作为 cnt,从员工组中选择 count(salary) > 1 的薪水

) 作为 X 内加入人员a上a.Salary=x.salary

按工资订购:


0
投票

当您必须将同一个表放置两次或多次时,请使用别名

select t1.Name,
       t2.Name,
       t1.Salary 
  from MyTable t1,
       MyTable t2
 where t1.Station > t2.Station and -- if Station is id 
       -- t1.Name > t2.Name -- if Name is in fact an id
       t1.Salary = t2.Salary 

0
投票

试试这个:

select COUNT(*) as NumberOfPerson,salary from tblEmployee group by salary having COUNT(*)>1

0
投票

对于 MySQL:

从工人中选择* 工资在哪里(从工人中选择工资 按工资分组 有计数(1)> 1);


0
投票

假设表名称是:employee

从员工 e、员工 e1 中选择不同的 e.name、e.salary,其中 e.salary = e1.salary 和 e.name != e1.name;


0
投票

第一个解决方案:

从员工 e1 中选择 e1.name 在 e1.salary=e2.salary 上内部加入员工 e2 AND e1.name <> e2.name

第二个简单的解决方案:

选择员工姓名 其中工资在(从员工中选择工资 按工资分组 有 count(*)>1)


0
投票

将同一张表视为单独的两个表。

SELECT DISTINCT T.username, T.salary
FROM account T, account T
WHERE T.salary = T.salary
AND T.username <> T.username
ORDER BY salary;

0
投票

假设我们有名为 EMP3 的表,其中的列为 FIRST_NAME、LAST_NAME、SALRY、DEPARTMENT_ID、COMMISSION 等。

现在我们必须选择具有相同薪水的员工记录。

让我们借助自加入来获得输出。

在这里,我们将同一个表与其本身连接起来,以获取具有相同薪水的记录。

SELECT E1.FIRST_NAME AS FN,E1.SALARY FROM EMPLOYEES E1 INNER JOIN EMPLOYEES E2 ON E1.SALARY=E2.SALARY;

-1
投票

你想要同样工资的人数吗?

SELECT count(*) FROM table GROUP BY salary
© www.soinside.com 2019 - 2024. All rights reserved.