Вычисление процентов sql

Не судите строго, я только начинаю. Нужна помощь, чтобы посмотреть, на сколько % был выполнен план.

чтобы это вычислить, добавляю эту строку в запрос,

count(t.pcode) / d.doctcode_reg * 100 as result

но походу что-то путаю или же нужно переводить в другой тип. Подскажите, как будет правильно.

Сам запрос этот:

select d.dname "ФИО"
      ,count(t.pcode) "Кол-во приемов"
      ,d.doctcode_reg "План"

from treat t
    ,doctor d

where t.dcode = d.dcode
  and d.doctcode_reg is not null
  and t.treatdate between
      ('01.06.2020 00:00')
  and ('30.06.2020 23:59')

group by d.dname
        ,d.doctcode_reg
pcode = bigint
doctcode_reg = varchar

Спасибо заранее!


Ответы (1 шт):

Автор решения: Alexandr

Попробовал накидать пример по вашему запросу. Некоторые детали не стал воспроизводить. Процент выполнения вычисляется. Единственное сделал через LEFT JOIN чтобы отображались все доктора.

WITH d AS (
    SELECT
        6 AS doctcode_reg,
        'Петров' AS dname,
        1 AS dcode
    FROM
        dual
    UNION ALL
    SELECT
        10 AS doctcode_reg,
        'Иванов' AS dname,
        2 AS dcode
    FROM
        dual
), t AS (
    SELECT
        1 AS pcode,
        1 AS dcode,
        SYSDATE AS treatdate
    FROM
        dual
    UNION ALL
    SELECT
        2 AS pcode,
        1 AS dcode,
        SYSDATE AS treatdate
    FROM
        dual
    UNION ALL
    SELECT
        3 AS pcode,
        1 AS dcode,
        SYSDATE AS treatdate
    FROM
        dual
)
SELECT
    d.dname          AS "ФИО",
    COUNT(t.pcode) AS "Кол-во приемов",
    round(COUNT(t.pcode) / d.doctcode_reg * 100, 2) AS "% выполнения",
    d.doctcode_reg   AS "План"
FROM
    d left
    JOIN t ON t.dcode = d.dcode
GROUP BY
    d.dname,
    d.doctcode_reg

Результат:

Иванов  0   0   10
Петров  3   50  6
→ Ссылка