2016-07-02 10 views
0

Hallo dort. Ich würde um Hilfe bei meinem Problem bitten. Ich habe eine Modellierung Situation wie folgt aus: Ich habe zwei Tabellen:SQL (MySQL) Zählen Sie den Durchschnitt zu einer Person für jede Klasse

STUDENTS

ID, FIRST_NAME, LAST_NAME,DATE_OF_BIRTH, CLASS, 
1, Petr, Fish, 4.3.1984, 4A 
2, John, Stone, 5.5.1990, 4A 
3, Jack, Clark, 6.3.1983, 4A 
4, George, Field, 5.8.1955, 4A 
5, John, Rock, 6.1.1999, 4B 
6, Patrick, Light, 1.11.1983, 4B 

und

POINTS_MATH:

STUDENT_ID, POINTS 
1, 15 
1, 20 
2, 30 
3, 11 
3, 5 
4, 3 

Und ich brauche zu zählen durchschnittlich Punkte, die einem Schüler in jeder Klasse zuzuordnen sind (auch mit Nullwert), so kann das Ergebnis lo sein ok so:

CLASS, AVERAGE_POINTS 
4A, 21 
4B, 0 

Vielen Dank für jede Antwort

+0

Können Sie erklären, wie die Ergebnisse berechnet werden? –

Antwort

0

Basierend auf Ihrem Beispiel nicht die durchschnittlichen Punkte wollen, aber die Summe aller durch die Anzahl der Schüler geteilt Punkte:

SELECT a.CLASS, 
    COALESCE(SUM(p.POINTS)/COUNT(DISTINCT p.STUDENT_ID), 0) 
FROM STUDENTS AS s 
LEFT JOIN POINTS_MATH AS p ON s.ID = p.STUDENT_ID 
GROUP BY c.CLASS 

Sie überprüfen könnten auch, wenn der Durchschnitt der Durchschnitt pro Schüler besser Ihren Bedarf passt:

SELECT s.CLASS, COALESCE(AVG(avgPoints), 0) 
FROM STUDENTS AS s 
LEFT JOIN 
(
    SELECT STUDENT_ID, AVG(POINTS) AS avgPoints 
    FROM POINTS_MATH 
    GROUP BY STUDENT_ID 
) AS p 
ON s.ID = p.STUDENT_ID 
GROUP BY s.CLASS 
+0

das ist genau was ich suche, vielen Dank. –