2010-10-28 13 views
1

J'ai appris le langage SQL depuis environ un jour et j'ai rencontré un problème avec la route. S'il vous plaît aidez-moi avec les questions suivantes:Aide avec les fonctions d'agrégat SQL

STUDENT (**StudentNumber**, StudentName, TutorialNumber) 
TUTORIAL (**TutorialNumber**, Day, Time, Room, TutorInCharge) 
ASSESSMENT (**AssessmentNumber**, AssessmentTitle, MarkOutOf) 
MARK (**AssessmentNumber**, **StudentNumber**, RawMark) 

PK et FK sont identifiés dans "**". J'ai besoin de générer des requêtes qui:

1) Liste des résultats des tâches d'évaluation indiquant: le numéro d'évaluation, le titre de l'évaluation et la note brute moyenne. Je sais comment utiliser la fonction avg pour une seule colonne, mais pour afficher quelque chose pour plusieurs colonnes ... un peu incertain ici.

Ma tentative:

SELECT RawMark, AssessmentNumber, AsessmentTitle 
FROM MARK, ASSESSMENT 
WHERE RawMark = (SELECT (RawMark) FROM MARK) 
AND MARK.AssessmentNumber = ASSESSMENT.AssessmentNumber; 

2) Rapport sur l'inscription montrant tutoriel: Nombre Tutorial, Jour, Chambre, Tuteur responsable et le nombre d'étudiants inscrits. Identique à la fonction avg, maintenant pour la fonction count. Cela nécessiterait-il 2 requêtes?

3) Énumérez la note brute de chaque élève dans chacune des tâches d'évaluation: numéro d'évaluation, titre de l'évaluation, numéro de l'étudiant, nom de l'élève, note brute, tuteur et temps. Trier par Tuteur en charge, Jour et Heure.

+0

Sons comme les devoirs, est-il? Vous devriez y jeter un coup d'œil, si vous avez ensuite poster vos progrès. –

+0

@SQLrookie - D'après ce que vous avez mis dans la question, vous semblez être sur la bonne voie! Je vous suggère de poster tout ce que vous avez jusqu'ici et les gens ici seront heureux de suggérer des façons de l'améliorer, le cas échéant – InSane

+0

D'accord, je posterai ce que j'ai jusqu'ici. – SQLrookie

Répondre

0

Voici un exemple pour le premier, prenez la logique et voyez si vous pouvez l'étendre aux autres questions. Je trouve que ces choses peuvent être difficiles à apprendre si vous ne trouvez pas d'exemples solides, mais une fois que vous aurez compris, vous réglerez le problème assez rapidement.

1)

SELECT a.AssessmentNumber, a.AssessmentTitle, AVG(RawMark) 
FROM ASSESSMENT a LEFT JOIN MARK m ON a.AssessmentNumber = m.AssessmentNumber 
GROUP BY a.AssessmentNumber, a.AssessmentTitle 

ou ne pas utiliser une jointure gauche ou noms de table d'alias

SELECT ASSESSMENT.AssessmentNumber, ASSESSMENT.AssessmentTitle, AVG(RawMark) 
FROM ASSESSMENT,MARK 
WHERE ASSESSMENT.AssessmentNumber = MARK.AssessmentNumber 
GROUP BY ASSESSMENT.AssessmentNumber, ASSESSMENT.AssessmentTitle 
+0

Merci, mais je n'ai pas appris le LEFT JOIN ... y at-il d'autres méthodes? – SQLrookie

+0

En fonction de la structure des données, vous pouvez utiliser une INNER JOIN ou même simplement le mot clé JOIN. – JonVD

+0

Merci encore. Je vais regarder les autres. – SQLrookie