Sql 选择薪资相同的所有人员

Sql 选择薪资相同的所有人员,sql,select,equals,Sql,Select,Equals,我无法找到SQL查询的解决方案。这可能是一个非常明显的初学者问题,但我似乎无法得到我想要的结果。我有一张类似于以下内容的桌子: |Name |Station|Salary| |Bob |1 |2000 | |Steve|2 |1750 | |Mark |3 |2050 | |Lisa |4 |2200 | |Hans |5 |2000 | 我想在此表中选择工资相同的人员的姓名。结果当然应该是鲍勃和汉斯 如果您在工资上加入表中,但名称

我无法找到SQL查询的解决方案。这可能是一个非常明显的初学者问题,但我似乎无法得到我想要的结果。我有一张类似于以下内容的桌子:

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

我想在此表中选择工资相同的人员的姓名。结果当然应该是鲍勃和汉斯

如果您在工资上加入表中,但名称是分开的,那么这将为您提供任何匹配的受薪人员:

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

要在行动中表现出来

您需要相同薪水的人数吗

SELECT Name
FROM table1 
WHERE Salary IN (
    SELECT Salary
    FROM table1
    GROUP BY Salary
    HAVING COUNT(*) > 1
)
SELECT count(*) FROM table GROUP BY salary

如果确定有多个员工的薪级,则可以将其作为派生表合并回:

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;

大多数数据库支持窗口功能。实现这一点的简单方法是计算拥有给定工资的人数。然后选择那些人。下面是一个简单的方法:

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

SELECT E1.Name, E1.Salary
FROM Employee E1, Employee E2
WHERE E1.Salary = E2.Salary
AND E1.Name <> E2.Name
使用以下查询:

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
)

从中选择a.name、a.salary 选择countsalary作为cnt,按countsalary>1的薪资从员工组中选择薪资

as X 在a.Salary=x.Salary上加入内部员工a

按a.salary排序:

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

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 
试试这个:

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

从worker中选择* 在“从工人中选择薪资”中的“薪资”位置 按工资分组 count1>1的

假设表名为:employee

选择不同的e.name,e.salary from employee e,employee e1,其中
e、 薪水=e1.薪水和e.姓名!=e1.姓名

非常感谢你,非常感谢你的帮助!有一个好的。请对所有有用的答案进行投票,并接受最准确的答案。E1.Name E2。Name条件不正确:查询将返回两条记录Bob,Hans和Hans,Bob而不是一条Bob,Hans这是自联接的方法。@StuartLC的答案就像一台只在MySql上工作的Rube Goldberg机器这解决了我的问题,谢谢!但对这个答案的支持低估了现成的解决方案。新的学习,再次感谢!请尝试在代码中添加详细信息/解释,以便于其他人理解,也请尝试在本页上遇到类似错误的人理解