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

时间:2015-10-02 04:16:37

标签: php mysql sql

我想做以下事情。我在数据库中有一个表,我正在处理一个名为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 )

问题是我必须做一个百分比

选择我的id_1列中的所有nro_matricula条记录,查看其在我的行中重复的次数,并对数据库中的所有日期执行百分比

EG:id_1来到课堂日(无论哪一天),他/她第二天没有上课,所以id_1有50%的帮助

预期结果

nro_matricula | percentage

          0001| 50
          0002| 100

问题是如何进行此查询。如果可以在PHP中完成,那就更好了,但我觉得这可以在SQL中完成

PS:数据库不是由我创建的

请原谅我的英语不是更好,我希望你帮助我是可以理解的

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

也许只是简单地说:

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

答案 2 :(得分:0)

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

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'

答案 3 :(得分:-1)

在Oracle中尝试过这个。也应该在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

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组,以获得其计数,这将给出它存在的日期。然后将上述步骤中的两个值除以得到百分比。