Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL :problème avec une requête qui obtient des pourcentages à l'aide de fonctions d'agrégation

Utiliser :

  SELECT je.statusid,
         COUNT(*) AS num,
         (COUNT(*) / (SELECT COUNT(*)+.0
                       FROM JOURNAL_ENTRY) ) * 100
    FROM JOURNAL_ENTRY je
GROUP BY je.statusid

Ensuite, il s'agit de formater la précision que vous souhaitez :

CAST(((COUNT(*) / (SELECT COUNT(*)+.0 FROM BCCAMPUS.dbo.COURSES_RFIP)) * 100)
     AS DECIMAL(4,2))

... donnera deux décimales. Convertissez le résultat en INT si vous ne voulez pas de décimales.

Vous pouvez utiliser un CTE pour minimiser la duplication :

WITH cte AS (
   SELECT je.*
     FROM JOURNAL_ENTRY je
    WHERE je.user_id = 3)
  SELECT c.statusid,
         COUNT(*) AS num,
         (COUNT(*) / (SELECT COUNT(*)+.0
                       FROM cte) ) * 100
    FROM cte c
GROUP BY c.statusid