1
votes

ORACLE SQL - SUM deux requêtes ensemble et une seule valeur

J'ai cherché un exemple simple pour additionner deux requêtes et obtenir une sortie finale sous la forme d'une valeur unique. J'ai mis en place une requête simple ci-dessous à utiliser comme exemple.

SELECT Count (banana)
FROM FRUIT_BASKET
WHERE CONDITION = 'ROTTEN'
/ -- THEN DIVIDE THIS NUMBER BY
SELECT Count (banana)
FROM FRUIT_BASKET
* 100 -- TO GET A PERCENTAGE

Toute aide sera un grand merci à tous


0 commentaires

4 Réponses :


1
votes

Cela devrait le faire:

SELECT COUNT(CASE WHEN CONDITION = 'ROTTEN' THEN banana END) * 100 / COUNT(banana)
FROM FRUIT_BASKET


0 commentaires

1
votes

Vous pouvez effectuer une agrégation conditionnelle:

select
    count(case when condition = 'ROTTEN' then banana end)
    / count(banana) * 100
from fruit_basket


0 commentaires

1
votes

J'aime utiliser AVG () pour ceci:

SELECT AVG(CASE WHEN Condition = 'Rotten' THEN 100.0 ELSE 0 END)
FROM FRUIT_BASKET
WHERE banana IS NOT NULL;


2 commentaires

C'est propre. Note latérale: oracle ne fait pas de division entière (comme vous le savez), donc pas besoin de la partie décimale dans 100.0 .


@GMB. . . C'est juste une habitude donc je n'ai pas à y penser.



1
votes

Je considérerais certainement le scénario diviser par zéro dans ce cas.

Il vaut donc mieux utiliser la fonction d'agrégation avg comme suggéré par gordon ou gérer diviser par zéro scénario par vous-même comme suit:

select
    count(case when condition = 'ROTTEN' then banana end)
    / decode(count(banana),0,1) * 100
from fruit_basket

Cheers !!


0 commentaires