J'ai ces deux tableaux et je dois trouver le nom du service avec le nombre maximum d'employés.
Les autres solutions n'étaient pas pour Oracle, donc je poste cette question. De plus, il serait vraiment utile que la requête puisse être expliquée en détail car j'ai du mal à la visualiser.
DEPT_NAME Production Marketing
Jusqu'à présent, j'ai réussi à obtenir le plus grand nombre de des employés. Je me demandais donc si je pouvais en quelque sorte écrire une autre sous-requête où je compte à nouveau les employés des départements et les compare au max_num_emp que j'ai calculé dans la première requête.
C'est la requête qui récupère nombre maximum d'employés. Il ne renvoie pas le dept_no.
select count(dept_no) from employee group by dept_no order by count(dept_no) desc fetch first row only;
Sortie attendue
EMPLOYEE EMPNO EMPNAME MANAGER SALARY DEPT_NO 1 Puja 6 30000 2 2 Purabi 1 15000 3 3 Barun 6 23000 2 4 Sudha 1 20000 1 5 Amal 2 20000 1 6 Rakesh 3 30000 4 DEPARTMENT Dept_No Dept_Name Location 1 Production LaneA 2 Marketing LaneB 3 Sales LaneC 4 HR LaneD
Je peux également ajouter la colonne dept_no dans la requête, alors je devrais en quelque sorte trouver comment obtenir le maximum et cela me donnait en quelque sorte des erreurs parce que la requête enfreignait certaines règles. J'avais en fait essayé de faire max ( requête ci-dessus ).
J'ai donc pensé à simplement obtenir le nombre maximum d'employés, puis à déterminer tous les départements qui ont ces nombreux employés et afficher leur nom.
3 Réponses :
Vous avez une requête de travail que vous devez joindre à la table department
:
select d.dept_name from department d inner join ( select x.dept_no from ( select dept_no, rank() over (order by count(*) desc) rn from employee group by dept_no order by count(dept_no) desc ) x where x.rn = 1 ) t on t.dept_no = d.dept_no
Modifier
Essayez ceci (je ne peux pas l'essayer):
select d.Dept_Name from department d inner join ( select dept_no from employee group by dept_no order by count(*) desc fetch first row only ) t on t.dept_no = d.dept_no
Salut, la requête fonctionne parfaitement, mais comment afficher uniquement la colonne dept_name? J'ai besoin d'une seule colonne dans la sortie. Merci!
Salut, il montre juste dept_name maintenant, mais il y a 2 départements qui ont un maximum d'employés. Il n'en montre qu'un pour l'instant.
C'est ce que fait chercher la première ligne uniquement
dans votre code.
Vous pouvez vérifier pourquoi j'ai ajouté cette clause dans ma requête à la fin de la question. J'ai clairement expliqué que c'était parce que je ne pouvais pas faire fonctionner la fonction max ()
.
Il affiche uniquement la production.
J'ai supprimé récupérer la première ligne uniquement
maintenant. Réessayer
Ça marche maintenant. Merci beaucoup! Cela me prendra du temps pour le comprendre. Quoi qu'il en soit, j'ai accepté votre réponse.
Bien si cela fonctionnait. Vérifiez ces éléments: docs.oracle.com/cd/B19306_01/server .102 / b14200 / functions123. htm et techonthenet.com/oracle /functions/rank.php
Si vous ne recherchez pas de doublons, alors:
select d.dept_name, count(*) from department d join employee e on d.dept_no = e.dept_no group by d.dept_no, d.dept_name order by count(dept_no) desc fetch first row only;
J'ai besoin de tous les noms de service qui ont le nombre maximum d'employés.
Vous avez peut-être utilisé la syntaxe FETCH..FIRST
en utilisant WITH TIES
au lieu de ONLY
.
SELECT d.dept_name FROM department d JOIN employee e ON d.dept_no = e.dept_no GROUP BY d.dept_name ORDER BY COUNT(*) DESC FETCH FIRST 1 ROW WITH TIES ;
C'est une solution tellement plus simple. Merci!
Qu'avez-vous essayé? Peut-être avez-vous une requête qui obtient le nombre d'employés par service, par exemple.
Je l'ai ajouté. Veuillez vérifier la question modifiée.