php - mysql计算两个子查询之间的百分比

标签 php mysql sql

我正在尝试计算出满足特定标准的学生数量的百分比。 我有 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/

相关文章:

php - JQuery 表单保持静态 - 页面不会动态验证

mysql 使用 leftjoin 选择两个匹配行的最新时间戳

mysql - 我怎样才能更好地优化这个查询?

php - MySQL 子查询,需要帮助构建 Select 语句

sql - 具有由联接表的不同行组成的列的 select 语句

php - 用于社交网络项目的带有 PHP api 或 PHP 脚本的视频托管

php - 将逗号分隔值转换为双引号逗号分隔字符串

php - 如何对这个 PHP 数组进行 JSON 编码?

php - 对列表中的数据进行排序

具有多个值的 MySQL 更新查询