Php 我应该如何在mysql中执行此查询

Php 我应该如何在mysql中执行此查询,php,mysql,sql,Php,Mysql,Sql,我想做以下几件事。我在数据库中有一个表,我正在处理一个名为asistencia的表,这个表有3列 id_asistencia作为int自动增量 nro_matricula作为一个int,我从另一个叫做 校友 作为约会对象 这是数据库的草图 id_asistencia | nro_matricula | fecha 1 | 0001| 2015-01-10 2 | 0002| 2015-01-10

我想做以下几件事。我在数据库中有一个表,我正在处理一个名为asistencia的表,这个表有3列

id_asistencia作为int自动增量

nro_matricula作为一个int,我从另一个叫做 校友

作为约会对象

这是数据库的草图

id_asistencia | nro_matricula | fecha

            1 |           0001| 2015-01-10
            2 |           0002| 2015-01-10
            3 |           0002| 2015-02-10 (another date )
问题是我必须做一个百分比

选择“我的nro_matricula”列中的所有id_1记录,查看它在我的行中重复了多少次,并对数据库中的所有日期执行百分比

例如:id_1每天都来上课,但他/她第二天没有来上课,所以id_1有50%的帮助

预期结果

nro_matricula | percentage

          0001| 50
          0002| 100
问题是我如何提出这个问题。如果可以在PHP中完成,那就更好了,但我觉得这可以在SQL中完成

PS:数据库不是我创建的

请原谅,我的英语不是很好,我希望你能理解我的英语,帮助我,也许只是:

select al.nro_matricula, 
 100 * count(distinct al.fecha) / (select count(distinct al1.fecha) from alumnos al1) as percentage
from alumnos al
group by al.nro_matricula

您可以像这样使用sql语句:

 select (
 sum (if nro_matricula = '001' ,1,0 )
 / count(*)
 from asistencia
 --where nro_matricula = '001'

在甲骨文中试过这个。也应该在MySQL中工作

SELECT aa.NRO_MATRICULA , days_present/total_count* 100 FROM 
     (SELECT DISTINCT NRO_MATRICULA, 
      COUNT(*) as days_present FROM ASISTENCIA GROUP BY NRO_MATRICULA ) AA
      ,
      (SELECT COUNT(*) as total_count FROM (SELECT DISTINCT(FECHA) FROM ASISTENCIA GROUP BY FECHA)) BB
乌普图

nro_matricula percentage
0001    50
0002    100

FECHA从ASISTENCIA AA GROUP中选择DISTINCTFECHA的查询SELECT COUNT*将在您的案例中给出不同日期2的计数。然后我们通过nro_matricula得到不同的nro_matricula组,得到它的计数,这将给出它出现的天数。然后将上述步骤中的两个值除以得到百分比。

我确实找到了问题的答案。谢谢大家帮助我

SELECT
asistencia.nro_matricula as matricula,
                COUNT( DISTINCT asistencia.fecha)* 100 /
                COUNT( DISTINCT asistencia.nro_matricula) / (SELECT COUNT(DISTINCT asistencia.fecha)
                FROM     asistencia
                ORDER BY COUNT(*) DESC
                LIMIT 1 )
                as porcentaje_asistencia
FROM asistencia
JOIN alumno 
WHERE asistencia.nro_matricula = alumno.nro_matricula AND alumno.id_curso = 'basica6a'

sor对于0002,百分比将为100?它类似于3条记录,但有2个不同的日期。因此0001出现一次,0002出现两次。因此50和100这些al.nro_matricula,Perct的意思是什么?表ALUMNOS和字段FECHA在不同的表中,因为在ASISTENCIA ALUMNOS的范围内不存在,所以检索该错误时,只有nro_matricula和ALUMNOS tablecheck之间的关系才能再次检查预期结果,或者仅仅是远程sql语句中的哪一个是php方法?我不知道sql是否有条件是的,这是mysql方法。MySQL还包括但不限于条件和控制流。请参阅MySQL参考指南链接MySQL说:1248-每个派生表必须有自己的别名相同错误1248-每个派生表必须有自己的别名删除所有别名。再试一次。遗憾的是错误仍然存在。我确实重新启动了本地主机,但一切都不起作用。感谢您的回复:很抱歉告诉您错误仍然存在。当我在表上创建别名时,我会像选择asistencia.nro_matricula as matricula那样执行操作。你的方法是一样的,还是用了另一种逻辑