Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL:Masz problem z zapytaniem, które pobiera wartości procentowe za pomocą funkcji agregujących

Użyj:

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

W takim razie jest to kwestia sformatowania żądanej precyzji:

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

...da dwa miejsca po przecinku. Przerzuć wynik na INT, jeśli nie chcesz żadnych miejsc dziesiętnych.

Możesz użyć CTE, aby zminimalizować powielanie:

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. Czy mogę zdefiniować, które łamacze wyrazów mają być używane podczas budowania indeksu pełnotekstowego mssql?

  2. Count(*) vs Count(Id) w serwerze sql 2005

  3. Jak skonfigurować sterownik Microsoft® ODBC 11 dla SQL Server® w systemie RedHat Linux z PHP

  4. Uciekanie parametrów poleceń przekazanych do xp_cmdshell do dtexec

  5. SQL Server 2008 — przestaw na jedną kolumnę, grupuj według drugiej, zachowaj odniesienie do trzeciej