我正在努力计算出符合某些标准的学生的百分比。 我有3个单独的表,我需要从中获取数据,然后我需要从一个表(学生)中获得总数作为学生总数。 然后我需要使用这个总数来划分第二个查询中学生数的COUNT。
所以基本上我想先计算一下DB中所有学生的数量。 然后计算出现在我的主查询中的学生数(返回数据的学生数)。 然后我需要执行计算,将noOfStudents(2)除以主要总数(24)(数据库中没有学生)然后* 100给我符合主要查询中符合条件的学生的百分比
这是我到目前为止所做的:
SELECT * FROM (
(
SELECT s.firstname, s.lastname, s.RegistrationDate, s.Email, d.ReviewDate,(r.description) AS "Viva" , COUNT(*) AS "No of Students"
FROM student s
INNER JOIN dates d
ON s.id=d.student_identifier
INNER JOIN reviews r
ON d.review_Identifier=r.id
WHERE r.description = "Viva Date"
GROUP BY s.student_identifier
ORDER BY s.student_identifier)
) AS Completed
WHERE Completed.ReviewDate BETWEEN '2012-01-01' AND '2014-12-01'
;
我需要在第二个SELECT之后输出字段,然后这些数据将通过页面上的PHP / HTML代码显示(BETWEEN日期将通过'%s'发送)。
我想知道我是否应该使用2个单独的查询,然后从第一个查询中获取值(24)以在第二个查询中执行计算,但我无法确定如何保存为2个单独的查询然后引用第一个查询。
我也不确定是否可以在输出符合条件的各个行的同时显示总百分比?
我正在尝试自学SQL,所以如果我在上述任何一个中做出任何明显的错误/假设,我会道歉,并且会感谢任何建议。
谢谢。
答案 0 :(得分:0)
你能这样做吗?
SELECT COUNT(*) as TotalPopulation,
COUNT(d.student_identifier='student') as TotalStudents,
COUNT(d.student_identifier='student')/ count(*) *100 as Percentage of students
from students s
inner join dates d
on s.id = d.student_identifier
inner join reviews r
on r.id = d.review_Identifier
WHERE d.ReviewDate BETWEEN '2012-01-01' AND '2014-12-01' and r.description = 'Viva Date';
如果您只是在寻找计数,则不需要名字姓。 这是表的计数(*),然后你用来识别第二个计数()中的学生的任何标志,你刚才把它分组,这可能会给你错误的结果,考虑到聚合前你的选择还有很多。
您也可以尝试:
SELECT d.student_identifier, s.firstname, s.lastname,
s.RegistrationDate, s.Email, d.ReviewDate,(r.description) AS "Viva"
FROM student s
INNER JOIN dates d
ON s.id=d.student_identifier
INNER JOIN reviews r
ON d.review_Identifier=r.id
WHERE r.description = "Viva Date" and d.ReviewDate BETWEEN '2012-01-01' AND '2014-12-01'
ORDER BY s.student_identifier
现在,如果你想返回一个列表,那就是第二个,如果你想返回一个计数,你可以使用第一个查询并调整你的student_identifier。