2016-07-02 3 views
0

Привет. Я попрошу о помощи с моей проблемой. У меня есть моделирования ситуации, как это: У меня есть две таблицы:SQL (MySQL) Средний подсчет, относящийся к одному человеку для каждого класса

СТУДЕНТОВ

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 

и

POINTS_MATH:

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

И мне нужно подсчитать среднее очков, относящихся к одному ученику в каждом классе (также с нулевым значением), поэтому результат может быть нормально, как это:

CLASS, AVERAGE_POINTS 
4A, 21 
4B, 0 

Большое спасибо за каждый ответ

+0

Можете ли вы объяснить, как рассчитываются результаты? –

ответ

0

Основываясь на вашем примере вы не хотите, средние точки, а сумма всех точек, деленное на количество студентов:

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 

Вы также можете проверить, если в среднем в среднем на одного студента лучше подходит вашей потребности:

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

Это именно то, что я ищу, спасибо большое. –