Как объединить эти два запроса из разных таблиц в один для расчета процента? - PullRequest
0 голосов
/ 23 октября 2019

У меня есть следующий запрос, который посещает студентов за период:

select total_presences from diary.period_attendance 
where id_customer = 1492 and id_diary_period = 172818 and id_user = 835603;

И у меня есть количество уроков за тот же период.

select count(*) from diary.lesson where id_diary_period = $1 and id_customer = $2 and end_date < now();

Я бы хотелразделить total_presences на количество уроков, чтобы получить процент посещаемости студентов.

Как мне сделать это в одном запросе?

Ответы [ 2 ]

2 голосов
/ 23 октября 2019

Вероятно, самый простой способ - использовать CTE:

WITH lesson_count AS (
   select count(*) as lessons
   from diary.lesson 
   where id_diary_period = $1 and id_customer = $2 and end_date < now()
)
select total_presences, total_presences/lessons
from diary.period_attendance, lesson_count
where id_customer = 1492 
  and id_diary_period = 172818 
  and id_user = 835603;

В зависимости от типа total_presences вам может потребоваться привести его к числовому, вещественному или плавающему типу, чтобы избежать целочисленной математики.

2 голосов
/ 23 октября 2019

Вы можете использовать кросс-соединение или объединение

 SELECT total_presences from diary.period_attendance 
    where id_customer = 1492 and id_diary_period = 172818 and id_user = 835603 t1;
    CROSS APPLY 
    (SELECT t1.total_presences /count(*) 
    from diary.lesson 
    where id_diary_period = $1 and id_customer = $2 and end_date < now();
    ) t2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...