J'ai la requête suivante, qui tente de comprendre le pourcentage d'un certain produit par rapport au nombre total de produits. IE: [Nombre de produits] / [Total des produits] = Pourcentage
;WITH totalCount AS(
SELECT
CAST(COUNT(id) as Integer)as totalCount
FROM TABLE_NAME
)
SELECT
((CAST(COUNT(DISTINCT id) as Integer)/(SELECT * FROM totalCount))*100) as 'Percent'
FROM TABLE_NAME
3 Réponses :
Cochez votre compte total comme un numéro en plus d'entier (décimal?) - Les maths s'élèvent. P>
Merci, ça a fonctionné! Ce sont toujours les choses simples qui vous montent.
Assurez-vous de commenter ce code. Le prochain développeur le plus peut ne pas être aussi intelligent que vous l'avez été.
J'utilise habituellement un hack encore plus simple et au lieu de multiplier par 100 multiplier par 100.0
Ne devrait-il pas être:
;WITH totalCount AS(
SELECT
CAST(COUNT(id) as Integer)as totalCount
FROM TABLE_NAME
)
SELECT
((CAST(COUNT(DISTINCT id) as Integer)*100/(SELECT count(*) FROM totalCount))) as 'Percent'
FROM TABLE_NAME
Je ne pense pas que la requête totaleCompte ne renvoie qu'une rangée, donc si vous ajoutez dans le compte (*), il retournera toujours 1, au lieu du total réel. Merci pour l'aide en tout cas :)
ok :-) Mais en multipliant par 100 résoudra certainement votre problème.
lancer comme quelque chose avec une précision décimale, pas entier. Un flotteur ou réel.
select cast(distinctCount as real)/cast(totalCount as real) * 100.00 , distinctCount , totalCount from ( select count(distinct id) as distinctCount , count(id) as totalCount from Table) as aggregatedTable
Utilisez Decimal N'utilisez jamais de flotteur ou réel dans un calcul mathématique, car ils sont des fichiers de données inexacts et peuvent introduire des erreurs d'arrondi.