Sql 选择薪资相同的所有人员
我无法找到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 | 我想在此表中选择工资相同的人员的姓名。结果当然应该是鲍勃和汉斯 如果您在工资上加入表中,但名称
|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机器这解决了我的问题,谢谢!但对这个答案的支持低估了现成的解决方案。新的学习,再次感谢!请尝试在代码中添加详细信息/解释,以便于其他人理解,也请尝试在本页上遇到类似错误的人理解