我想做以下事情。我在数据库中有一个表,我正在处理一个名为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
组,以获得它的计数,这将给出它存在的天数。然后将上述步骤的两个值除以得到百分比。