sql >> Database teknologi >  >> RDS >> Sqlserver

SQL:Har problemer med forespørgsel, der henter procenter ved hjælp af aggregerede funktioner

Brug:

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

Så er det et spørgsmål om at formatere den præcision, du ønsker:

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

... vil give to decimaler. Cast resultatet til INT, hvis du ikke vil have nogen decimaler.

Du kan bruge en CTE til at minimere duplikeringen:

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. Jeg har forskellige resultater fra forespørgsel for COUNT('e.id') eller COUNT(e.id)

  2. Sådan rettes dobbeltkodede UTF8-tegn (i en utf-8-tabel)

  3. Optimer SQL, der bruger mellem klausul

  4. OPDATERING/INDSÆT baseret på, om der findes en række