J'essaie d'obtenir un pourcentage de l'enregistrement total en plus des comptes de chaque groupe.
Par exemple, j'ai une requête ci-dessous où je reçois le nombre de documents totals qui sont "touchés" et "touchés" et ceux qui ne le font pas. p>
Je veux ensuite obtenir le pourcentage de l'ensemble en termes de celles-ci (si 40/50 enregistrements sont "touchés", il devrait indiquer 80%) P> N / A P>
SELECT COUNT(Contact) AS [COUNT], (CASE WHEN number>=1 THEN 'Touched' ELSE 'Not Touched' END) AS TOUCHED FROM Events GROUP BY (CASE WHEN number>=1 THEN 'Touched' ELSE 'Not Touched' END) Count TOUCHED 604 Not Touched 213 Touched
4 Réponses :
compte () * 100 / somme () code> retournera le pourcentage:
SELECT COUNT(Contact) AS COUNT,
(CASE WHEN number >= 1 THEN 'Touched' ELSE 'Not Touched' END) AS TOUCHED,
(COUNT(Contact) * 100 / SUM(Contact)) AS PERCENT
FROM Events
GROUP BY (CASE WHEN number >= 1 THEN 'Touched' ELSE 'Not Touched' END)
Vous pourrait i> envie d'éviter la division entière ici.
Ceci devrait vous procurer ce que vous êtes après:
SELECT COUNT(Contact) AS [COUNT], (COUNT(Contact) * 1.0) / COUNT(Contact) OVER () AS Perc, CASE WHEN number>=1 THEN 'Touched' ELSE 'Not Touched' END AS TOUCHED FROM Events GROUP BY CASE WHEN number>=1 THEN 'Touched' ELSE 'Not Touched' END;
Il suffit d'envelopper quelque chose comme: Ceci peut également être accompli en l'insérant dans une table Temp et faisant la même chose avec les colonnes. P> vous peut avoir à lancer / convertir [touché] à une décimale. p> p>
L'OP n'a pas 2 colonnes appelées touché code> et
[non touché] code>, ce sont des
varchar code> valeurs de la colonne
touchée code>.
OPE a raté cela, bon point. Devinez ID Utilisez une jointure auto pour la séparer dans 2 colonnes, alors cela ressemble à ce que tout le monde a cela.
Cette version remplace les étiquettes de votre requête d'origine avec les noms de colonne. Si vous avez besoin d'étiquettes en ligne, les modifications doivent être simples: Notez que si numéro code> ne peut jamais être négatif, le calcul touché peut être modifié en p >
SUM(SIGN(number)) as Touched,