我想做以下事情。我在数据库中有一个表,我正在处理一个名为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:数据库不是由我创建的
请原谅我的英语不是更好,我希望你帮助我是可以理解的
答案 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
组,以获得其计数,这将给出它存在的日期。然后将上述步骤中的两个值除以得到百分比。