sql >> Databáze >  >> RDS >> Sqlserver

SQL:Potíže s dotazem, který získává procenta pomocí agregačních funkcí

Použijte:

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

Pak je to otázka formátování s požadovanou přesností:

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

...uvede dvě desetinná místa. Pokud nechcete žádná desetinná místa, přeneste výsledek do INT.

K minimalizaci duplikace můžete použít 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. Zabránit duplicitnímu vkládání dat v Oracle

  2. Pro parametry v připraveném výpisu nejsou dodány žádné údaje

  3. zkopírování databázového souboru z /assets do složky /data/data v průzkumníku souborů - Android

  4. Špatné kódování mezi Spring a PostgreSQL