Cela pourrait ne pas vous adresser question directement, mais quand vous autour d'un ensemble de nombres pour l'affichage que vous n'êtes jamais garanti d'obtenir des chiffres qui ajoutent à 100 sauf si vous prenez des précautions particulières. Par exemple, arrondir 33,33333, 33,33333 et 33,33333 va vous laisser un court sur la somme, donc la chose logique à faire est de modifier le pourcentage de la plus grande valeur de l'ensemble pour tenir compte de toute différence.
Voici une façon de le faire dans Oracle SQL en utilisant des fonctions analytiques et une clause de sous-requête d'affacturage (WITH) pour générer des exemples de données.
with data as (select 25 num from dual union all
select 25 from dual union all
select 25 from dual)
select num,
case
when rnk = 1
then 100 - sum(pct) over (order by rnk desc
rows between unbounded preceding
and 1 preceding)
else pct
end pct
from
(
select num,
round(100*ratio_to_report(num) over()) pct,
row_number() over (order by num desc) rnk
from data
)
/
NUM PCT
---------------------- ----------------------
25 33
25 33
25 34
Merci, c'est celui qui est parti, car il a arrondi le nombre, les autres réponses ont toutes fonctionné aussi, bien que merci allouer tout le monde :) –
J'ai trouvé il vaut mieux convertir en décimal que float. Certaines divisions fonctionnent mieux en mode décimal, au moins sur le serveur Microsoft SQL: SELECT 5555/CAST (1000 AS float), CAST (5555/CAST (1000 AS float) AS numérique (5, 2)), 5555/CAST (1000 AS décimal), CAST (5555/CAST (1000 AS décimal) AS Numérique (5, 2)) – user12861