Pour la requête ci-dessous:MySql
SELECT Id, Salary
FROM Employee e
WHERE 2 = (SELECT COUNT(DISTINCT Salary) FROM Employee p
WHERE e.Salary<=p.Salary)
Si pas la condition e.salary<=p.salary
dans la sous-requête est irréversible. Nous devrions comparer la colonne p.salary avec la colonne e.salary
de la requête externe à plusieurs reprises et donc p.salary
doit être sur le côté gauche. S'il vous plaît laissez-moi savoir si ma compréhension est erronée. PS: la requête ci-dessus tente de trouver le deuxième salaire le plus élevé de la table Employé.
Modifier: Le problème semble être dans ma compréhension. J'ai mentionné ci-dessous comment je pense que la requête peut être exécutée:
Disons que nous avons une table Employé avec 4 salaires 10,20,30,40. Maintenant, les enregistrements commencent à être traités un par un. Donc, nous obtenons en quelque sorte les 4 implémentations intermédiaires suivantes:
`code`
SELECT Id, Salary
FROM Employee e
WHERE 2 = (SELECT COUNT(DISTINCT p.Salary)
FROM Employee p
WHERE 10<=p.salary -- record with salary 10
);
SELECT Id, Salary
FROM Employee e
WHERE 2 = (SELECT COUNT(DISTINCT p.Salary)
FROM Employee p
WHERE 20<=p.salary
);
SELECT Id, Salary
FROM Employee e
WHERE 2 = (SELECT COUNT(DISTINCT p.Salary)
FROM Employee p
WHERE 30<=p.salary
);
SELECT Id, Salary
FROM Employee e
WHERE 2 = (SELECT COUNT(DISTINCT p.Salary)
FROM Employee p
WHERE 40<=p.salary
);
`code`
Cette commande est-elle correcte? Est-ce que la colonne que nous essayons de comparer ne doit pas être sur le côté gauche comme p.salary>=e.salary
?
Quelle base de données utilisez-vous? – GurV
Cette requête me semble correcte. Avez-vous un problème réel? –
La condition dans la clause 'WHERE' dit compter le nombre de salaires qui sont> = la ligne actuelle, et assurez-vous que ce nombre est = 2 ... en d'autres termes, prendre le deuxième salaire le plus élevé. –