sql >> Databasteknik >  >> RDS >> Sqlserver

SQL:Har problem med fråga som får procentsatser med aggregatfunktioner

Använd:

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

Sedan gäller det att formatera den precision du vill ha:

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

...ger två decimaler. Kasta resultatet till INT om du inte vill ha några decimaler.

Du kan använda en CTE för att minimera dubbleringen:

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. Filtrera efter datumintervall (samma månad och dag) över år

  2. Antal rader i Oracle SQL Select?

  3. MySQL JOIN Missbruk? Hur illa kan det bli?

  4. Hur ändrar du SQL-isoleringsnivån från Python med MySQLdb?