Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL:Имате проблеми със заявка, която получава проценти с помощта на агрегатни функции

Използвайте:

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

След това е въпрос на форматиране с желаната точност:

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

... ще даде два знака след десетичната запетая. Прехвърлете резултата на INT, ако не искате никакви десетични знаци.

Можете да използвате CTE, за да минимизирате дублирането:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Създайте резервно копие на Sql сървър на локална машина

  2. Може ли ограничение за проверка да се отнася до друга таблица?

  3. Операторът ALTER TABLE е в конфликт

  4. как да извлека само годината от датата в sql server 2008?

  5. Как да разрешим влизанията в Azure в Windows не се поддържат в тази версия на SQL Server?