Разделение двух результатов подсчета с помощью eachother в SQL - PullRequest
1 голос
/ 27 сентября 2019

У меня есть два результата COUNT (), которые я хотел бы разделить, но он не работает, когда я пытаюсь объединить его в один запрос.Когда я пытаюсь запустить этот код, я получаю сообщение об ошибке синтаксиса «или около» «SELECT»:

SELECT COUNT(student.userid) FROM borrowed CROSS JOIN student WHERE student.userid = borrowed.userid AND current_date > expiredate AND returndate IS NULL / SELECT COUNT(userid) FROM student;

Код должен получить процент от числа «Студентов», которые в настоящее время опаздывают, возвращая книгубиблиотека.Два фрагмента кода, разделенные символом «/», прекрасно работают по отдельности.Левый:

SELECT COUNT(student.userid) FROM borrowed CROSS JOIN student WHERE student.userid = borrowed.userid AND current_date > expiredate AND returndate IS NULL;

создает таблицу счетчиков, содержащую значение 2. Правый:

SELECT COUNT(userid) FROM student;

создает таблицу счетчиков, содержащую значение 15.

То, что я хочу получить, это процент.Так что 2/15 должно принести мне что-то вроде 13,3%.Как мне решить это как отдельный запрос?Деление должно быть сделано как-то с плавающей (или другой десятичной).Может ли кто-нибудь предоставить мне запрос, который решает эту проблему?Спасибо <3 </p>

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Я бы порекомендовал следующее:

SELECT COUNT(DISTINCT b.student_id) / s.num_students
FROM borrowed b CROSS JOIN
     (SELECT COUNT(*) as num_students FROM student) s
WHERE b.current_date > expiredate AND b.returndate IS NULL;

В частности, это число студентов не поздних книг .Таким образом, студент с двумя поздними книгами учитывается только один раз, а не дважды.

0 голосов
/ 27 сентября 2019

Вы можете попробовать следующий запрос:

SELECT COUNT(student.userid)::decimal / (SELECT COUNT(userid) FROM student) 
FROM borrowed 
CROSS JOIN student 
WHERE student.userid = borrowed.userid 
     AND current_date > expiredate AND returndate IS NULL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...