/ / wie soll ich diese abfrage in mysql machen - php, mysql, sql

Wie sollte ich diese Abfrage in MySQL - PHP, MySQL, SQL

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 AUTOINCREMENT

  • nro_matricula als int das habe ich es von einem anderen tisch namens genommen alumnos

  • 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 № 1

Sie 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.