我正在尝试计算出满足特定标准的学生数量的百分比。 我有 3 个单独的表,我需要从中获取数据,然后我需要从一个表(学生)中获取总数作为学生总数。 然后我需要使用这个总数来除第二个查询中的学生人数。
所以基本上我想首先统计数据库中所有学生的数量。 然后计算出现在我的主查询中的学生数量(返回数据的学生)。 然后我需要执行计算,将 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,因此如果我在上述任何方面犯了任何明显的错误/假设,我深表歉意,并且非常感谢您提供的任何建议。
谢谢。
最佳答案
你能做到吗?
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';
如果您只是想查找计数,则不一定需要名字。 这是表的 count(*) ,然后无论您在第二个 count() 中使用什么标志来识别学生,您都只是按之前对其进行分组,考虑到聚合之前您的选择中有很多其他内容,这可能会给您带来错误的结果。
您还可以尝试:
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
现在,如果您想返回一个列表,那就是第二个,如果您想返回一个计数,您将使用第一个查询并调整为您的学生标识符。
关于php - mysql计算两个子查询之间的百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23370707/