2016-08-20 3 views
0

Ich bin stecken zu versuchen, Berechnungen in SQL-Abfrage zu tun. I Tabelle Teilnahme haben, die wie folgt aussieht:Berechnungen in Sql-Abfrage

roll | class_id | status 
abc |  1 | 0 
qwe |  1 | 0 
zxc |  2 | 1 
xcv |  1 | 1 
mnb |  2 | 1 
poi |  1 | 1 
lkj |  2 | 0 

Ich habe Formel anzuwenden hier:

att= (count where roll="abc" status = "1"/count where roll="abc" status = "1" + count where roll="abc" status = "0") * 100 

Und dann alle Rollen zeigen, die att mehr als 75% haben

roll | att 
abc | 80 
xyz | 100 

Ich habe diese Berechnung durchgeführt, nachdem ich Werte in PHP erhalten habe. Aber jetzt muss ich das in der Abfrage erledigen. Ich mache es individuell von

select * from attendance where status="0" and roll="abc" 

und es dann wieder zu tun für status="1"

Kann mir jemand erklären? Wie kann ich mit der Abfrage umgehen?

Antwort

2

Sie können SUM() verwenden, um eine Gesamtzahl der Zeilen zu erhalten, die einer Bedingung entsprechen, da die Bedingung 1 ergibt, wenn sie wahr ist.

SELECT roll, ROUND(SUM(status = 1)/COUNT(*) * 100) AS att 
FROM attendance 
GROUP BY roll 
HAVING att > 75 
+0

Ich denke, du hast meine Frage nicht verstanden. –

+0

Ich muss die Zeilen zählen, die Status = 0 und Status = 1 anstelle von Summe haben –

+0

In den Zeilen mit 0 gibt 'Status = 0' '1' zurück. Wenn Sie sie addieren, zählt das diese Zeilen. – Barmar