Trouver le nom des salariés, dont les noms sont les mêmes mais les salaires sont différents
J'ai un "employé" de la table avec
create table employee
(
e_number int,
e_name varchar(20),
salary money,
hire_date date
)
Maintenant, je veux afficher uniquement le nom des employés qui ont le même nom, mais différents de salaire.
J'ai essayé select e_name,count(*) from employee group by e_name having count(*)>1;
mais ne peut pas la combiner avec "le même salaire". Toute aide?
OriginalL'auteur Srijit B | 2012-12-11
Vous devez vous connecter pour publier un commentaire.
Cela suppose que vous voulez que les noms des personnes inscrites:
Si vous ne souhaitez que chaque nom inscrit une fois, vous pouvez utiliser un SELECT DISTINCT au lieu de le SÉLECTIONNER.
Si vous utilisez SELECT DISTINCT, au lieu de SÉLECTIONNER?
C'est cool. Merci @Davis_m
Pouvez-vous préciser l'utilisation de <> opérateur?
<> est tout simplement la syntaxe pour "pas égaux". Il pense que d'avoir à être à la fois supérieur et inférieur, ce qui est impossible.
OriginalL'auteur Michael Davis
Si votre objectif est de l'exprimer dans la clause having:
min(salary) <> max(salary)
au lieu de!=
?Est-ce le cas dans MS Sql? != est mon Oracle de fond... que ce soit "différent" de l'opérateur travaille dans le SGBD cible. J'aime bien la confusion que cela causerait min(salaire) < max(salaire).
Fonctionne très bien mais peut-u s'il vous plaît décrire le travail de min(salaire) != max(salaire)?
La clause Having est une clause where qui est appliqué APRÈS l'agrégation. Donc, nous vous demandons est le salaire minimum au sein de cette agrégation différents qu'un maximum de salaire? Si oui, permettent l'agrégation d'être inclus dans les lignes renvoyées.
OriginalL'auteur Brian
Obtiendrez tous les employés, de se joindre à tous les autres employés par leur nom, d'où le numéro d'employé est différent (donc ne pas se joindre à vous-même) et le salaire est différent.
Vous n'avez probablement pas besoin de vérifier que le numéro d'employé est différent parce que 1 employé ne peut avoir 1 salaire dans votre conception de table
OriginalL'auteur Greg
Utiliser une jointure, mais surtout d'utiliser un peu plus de la comparaison, plutôt que d'un pas égal, pour éviter les doublons:
Note également que l'état comprend le salaire de comparaison. C'est une idée fausse commune que la jointure sur la condition peut contenir uniquement liée à la clé des comparaisons. Cette action peut avoir d'importants avantages de performance, en particulier lorsque les jointures sont faites, parce que la condition est exécutée comme les lignes sont rejoints - qui ignore les non-correspondances immédiatement, alors que là OÙ les conditions sont exécutés comme un filtre sur l'ensemble de l'ensemble de résultats de la rejoint.
OriginalL'auteur Bohemian
Vous voulez juste le nombre de distinct les salaires, pas le nombre de tous les dossiers.
(Drop le comte de sélectionner si inutiles - inclus depuis qu'il a été dans votre exemple)
OriginalL'auteur fyjham
Premier filtre salaire double pas (non), puis regroupement par
e_name
avoir count > 1OriginalL'auteur Ronny Susetyo