sql >> Database >  >> RDS >> Sqlserver

SQL:problemen met een query die percentages krijgt met behulp van aggregatiefuncties

Gebruik:

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

Dan is het een kwestie van de gewenste precisie formatteren:

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

... geeft twee decimalen. Cast het resultaat naar INT als u geen decimalen wilt.

U kunt een CTE gebruiken om de duplicatie te minimaliseren:

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


  1. Hoe u de datumnotatie in uw Oracle-sessie kunt wijzigen

  2. maak id-kolom op basis van activiteitsgegevens

  3. Hoe GOTO te gebruiken in SQL Server

  4. Bereken werktijd uit ploegen- en pauzetabel