Как усреднить только те, которые имеют сумму больше, чем в запросе SQL - PullRequest
0 голосов
/ 12 апреля 2019

Как получить среднее значение суммы кредитов только для тех студентов, чья сумма кредитов больше или равна 15 кредитам в SQL-запросе?

При использовании HAVING (SUM (STC_ATT_CRED))> = 15,0 это дает мне среднее значение по всем студентам, а не только по тем, у кого сумма кредитов 15,0 или более.

SELECT (SUM(STC_ATT_CRED)  )/COUNT(DISTINCT stc_person_id) as 'average attempted credit',
COUNT (DISTINCT stc_person_id)         
FROM  dbo.S85_STUDENT_ACAD_CRED  
WHERE (STC_TERM='2018FA') AND ((STC_VERIFIED_GRADE IS NOT NULL ))   
AND STC_PERSON_ID IN (75 student id's in here)
HAVING (SUM(stc_att_cred)) >= 15.0

Я ожидаю, что результатом будет среднее от суммы попыток кредитов для ТОЛЬКО 46 студентов , которые соответствуют критериям (сумма попыток кредитов 15 или более ).

Вместо этого результат дает мне среднее число ВСЕХ 75 студентов, а не сужает его только до тех, кто пытался получить сумму 15 или более кредитов.

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Я бы сделал это с внутренней таблицей:

SELECT avg here
FROM
( 
    --Get the students and sum credits
    --Filter this list for students with sum >= 15
    SELECT STC_PERSON_ID, SUM(stc_att_cred) as studentSum     
    FROM  dbo.S85_STUDENT_ACAD_CRED  
    WHERE (STC_TERM='2018FA') AND ((STC_VERIFIED_GRADE IS NOT NULL ))  AND 
           STC_PERSON_ID IN (75 student id's in here)
    GROUP BY STC_PERSON_ID
    HAVING (SUM(stc_att_cred)) >= 15.0
)studentsWithSumCreditsOverFifteen
0 голосов
/ 12 апреля 2019

Сначала GROUP BY stc_person_id, чтобы получить сумму для каждого студента, а затем отфильтровать результаты с условием, что сумма всех студенческих stc_att_cred >= 15.0 и получить среднее значение:

SELECT 
  SUM(t.studentsum) / COUNT(*) 'average attempted credit',
  count(*)
FROM (
  SELECT 
    stc_person_id, 
    SUM(STC_ATT_CRED) studentsum
  FROM dbo.S85_STUDENT_ACAD_CRED
  WHERE 
    STC_TERM='2018FA'
    AND 
    STC_VERIFIED_GRADE IS NOT NULL
    AND 
    STC_PERSON_ID IN (75 student id's in here)
  GROUP BY stc_person_id
) t
WHERE t.studentsum >= 15.0 
...