0
votes

Moyenne SQL par TermID et yearID

Voici mon code SQL contient des tables: tblstudentdetail et tblstudentinfo

Aaron   124             9   NULL        NULL     NULL     1            17      2.923
Debbie  2344            7   NULL        NULL     NULL     1            19       4.31

result:

Name StudentID  YearID  DualCredits DC_Classes  DC_GPA  StatusID    ActScore    YearID  TermID   GPA
Aaron   124             9   NULL        NULL     NULL     1            17        10     1      2.901
Aaron   124             9   NULL        NULL     NULL     1            17        10     2      3.171
Aaron   124             9   NULL        NULL     NULL     1            17        11     1      2.31
Aaron   124             9   NULL        NULL     NULL     1            17        11     2      3.31
Debbie  2344            7   NULL        NULL     NULL     1            19        9      1      4.31
Debbie  2344            7   NULL        NULL     NULL     1            19        10     1      4.31

Comment puis-je calculer la moyenne de la moyenne des GPA? Je veux un résultat comme celui-ci:

 SELECT distinct  TblstudentInfo.FirstName +''+ TblstudentInfo.LastName as Name,TblstudentInfo.StudentID, TblstudentInfo.YearID, TblstudentInfo.DualCredits, TblstudentInfo.DC_Classes, TblstudentInfo.DC_GPA, tblStudentDetail.StatusID, TblstudentInfo.ActScore,tblStudentDetail.YearID
      ,tblStudentDetail.TermID,tblStudentDetail.GPA
FROM TblstudentInfo

left join tblStudentDetail on TblstudentInfo.StudentID = tblStudentDetail.StudentID
order by  name


1 commentaires

DISTINCT n'a aucun but utile ici ni dans la solution acceptée. Alors arrêtez de le jeter dans n'importe quelle requête qui ne vous donne pas ce que vous voulez pour tenter de "résoudre" quelque chose. Vous incluez StatusID à partir de la table que vous agrégez - assurez-vous de comprendre ce que signifie cette colonne et si / quand elle peut varier pour un étudiant donné.


3 Réponses :


1
votes

Utiliser l'agrégation:

 SELECT si.FirstName +''+ si.LastName as Name, si.StudentID,
        si.YearID, si.DualCredits, si.DC_Classes, 
        si.DC_GPA, si.StatusID, si.ActScore, si.YearID,
        AVG(d.GPA)
FROM TblstudentInfo si LEFT JOIN
     tblStudentDetail d
     ON si.StudentID = d.StudentID
GROUP BY si.FirstName, si.LastName, si.StudentID,
         si.YearID, si.DualCredits, si.DC_Classes, 
         si.DC_GPA, si.StatusID, si.ActScore, si.YearID;


0 commentaires

1
votes

Utilisez simplement la fonction AVG () sur le GPA, puis Groupez par le reste des colonnes

SELECT si.FirstName +''+ si.LastName as Name, si.StudentID,
        si.YearID, si.DualCredits, si.DC_Classes, 
        si.DC_GPA, si.StatusID, si.ActScore, si.YearID,AVG(d.GPA)
FROM TblstudentInfo si LEFT JOIN tblStudentDetail d
ON si.StudentID = d.StudentID
GROUP BY si.FirstName, si.LastName, si.StudentID,si.YearID, si.DualCredits, si.DC_Classes, si.DC_GPA, si.StatusID, si.ActScore, si.YearID;


1 commentaires

Je pense que l'identifiant de statut serait d.statusid



0
votes

Vous cherchez que vous pouvez utiliser AVG () et groupe par

 SELECT distinct  
    TblstudentInfo.FirstName +''+ TblstudentInfo.LastName as Name
  , TblstudentInfo.StudentID
  , TblstudentInfo.YearID
  , TblstudentInfo.DualCredits
  , TblstudentInfo.DC_Classes
  , TblstudentInfo.DC_GPA
  , tblStudentDetail.StatusID
  , TblstudentInfo.ActScore
  , avg(tblStudentDetail.GPA)
FROM TblstudentInfo
LEFT JOIN tblStudentDetail ON TblstudentInfo.StudentID = tblStudentDetail.StudentID
GROUP BY TblstudentInfo.FirstName +''+ TblstudentInfo.LastName as Name
  , TblstudentInfo.StudentID
  , TblstudentInfo.YearID
  , TblstudentInfo.DualCredits
  , TblstudentInfo.DC_Classes
  , TblstudentInfo.DC_GPA
  , tblStudentDetail.StatusID
  , TblstudentInfo.ActScore
order by  name


0 commentaires