我应该如何在mysql做这个查询


how should i do this query in mysql

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

  • id_asistencia作为int AUTOINCREMENT

  • nro_matricula作为一个int,我从另一个表中取了它alumnos

  • fecha作为日期

这是数据库的草图

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:数据库不是我创建的

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

可以这样使用sql语句:

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

也许只是:

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

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

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'

在Oracle中尝试过。

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

Ouptut

nro_matricula percentage
0001    50
0002    100

查询(SELECT COUNT(*) FROM (SELECT DISTINCT(FECHA) FROM ASISTENCIA AA GROUP BY FECHA))将给出不同日期的计数(在您的情况下为2)。然后,我们通过nro_matricula获得不同的nro_matricula组,以获得它的计数,这将给出它存在的天数。然后将上述步骤的两个值除以得到百分比。