5 votes

Projection d'une valeur à partir d'une expression de la clause HAVING

Je m'excuse d'avance car je suis quelque peu novice en SQL et mon code peut sembler n'avoir aucun sens, mais je vais essayer de lui donner le plus de sens possible et j'espère que les personnes plus expérimentées pourront m'aider. Je ne sais pas si cela peut vous aider, mais j'utilise une base de données Oracle.

J'ai deux tables :

Éléments - Celui-ci contient un elementID ainsi qu'un nom de l'élément champ
Échanges - Celui-ci contient un exchangeID et un elementID champ

J'ai créé la requête suivante afin de récupérer uniquement les éléments qui apparaissent dans plus de 50% des échanges :

SELECT e.elementName
FROM Elements e
WHERE e.elemID in
(SELECT elemID FROM Exchanges
GROUP BY elemID
HAVING (count(*) / (SELECT count(*) FROM
(SELECT exchangeID, count(*) FROM Exchanges GROUP BY exchangeID))) > 0.5);

Cette partie semble fonctionner correctement, mais j'ai également besoin de récupérer le % d'occurrences pour chaque élément dans les échanges. Ainsi, par exemple, si un élément A apparaît dans 76 % des échanges et un élément B dans 59 % des échanges, je voudrais renvoyer une ligne avec A et 76 % et une autre ligne avec B et 59 %. Dans mon esprit, cela signifierait obtenir le résultat de l'expression située à gauche de la clause HAVING :

(count(*) / (SELECT count(*) FROM
(SELECT exchangeID, count(*) FROM Exchanges GROUP BY exchangeID)))

Cette expression me donne le pourcentage que je recherche, mais je n'ai pas réussi à trouver un moyen d'utiliser cette expression de manière à pouvoir la récupérer avec un SELECT afin de l'associer au nom de l'élément correspondant, comme je viens de l'expliquer.

Existe-t-il un moyen de propager cette valeur jusqu'à mon SELECT afin que je puisse récupérer la valeur que je recherche ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X