Ich möchte folgendes tun. Ich habe eine Tabelle in der Datenbank, ich arbeite an einer Tabelle namens asistencia
und diese Tabelle hat 3 Spalten
id_asistencia
als int AUTOINCREMENTnro_matricula
als int das habe ich es von einem anderen tisch namens genommenalumnos
fecha
als ein Datum
Dies ist eine Skizze der Datenbank
id_asistencia | nro_matricula | fecha
1 | 0001| 2015-01-10
2 | 0002| 2015-01-10
3 | 0002| 2015-02-10 (another date )
Die Sache ist, dass ich einen Prozentsatz tun muss
Wählen Sie Alle id_1
Aufzeichnungen in meiner nro_matricula
Spalte und sehen, wie oft es in meinen Zeilen wiederholt wird und wie viel Prozent alle Daten in meiner Datenbank berücksichtigen
Z.B : id_1
kam zum Unterrichtstag (welcher Tag auch immer) und er / sie kam am nächsten Tag nicht zum Unterricht id_1
hat 50% Unterstützung
Erwartetes Ergebnis
nro_matricula | percentage
0001| 50
0002| 100
Die Frage ist, wie ich diese Abfrage machen kann. Wenn kann in getan werden PHP
Es ist sogar noch besser, aber ich glaube, dass dies in getan werden kann SQL
PS: Die Datenbank wurde nicht von mir erstellt
Und entschuldigen Sie, mein Englisch ist nicht besser und ich erwarte, dass es für Sie verständlich ist, mir zu helfen
Antworten:
2 für die Antwort № 1Sie können die SQL-Anweisung folgendermaßen verwenden:
select (
sum (if nro_matricula = "001" ,1,0 )
/ count(*)
from asistencia
--where nro_matricula = "001"
1 für die Antwort № 2
Vielleicht nur einfach:
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
0 für die Antwort № 3
Ich habe die Antwort auf meine Frage gefunden. Ich danke Ihnen allen, dass Sie mir geholfen haben
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"
-1 für die Antwort № 4
Versuchte dies in Oracle. Sollte auch in MySQL funktionieren.
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
Die Abfrage (SELECT COUNT(*) FROM (SELECT DISTINCT(FECHA) FROM ASISTENCIA AA GROUP BY FECHA))
Gibt die Anzahl der eindeutigen Daten an (2 in Ihrem Fall). Dann werden wir deutlich nro_matricula
gruppiere nach nro_matricula
um seine Zählung zu erhalten, die die Tage gibt, an denen es anwesend war. Teilen Sie dann beide Werte aus den obigen Schritten, um den Prozentsatz zu erhalten.