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
3 Réponses :
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;
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;
Je pense que l'identifiant de statut serait d.statusid
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
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é.