2010-10-28 2 views
1

Я изучаю SQL около дня, и я столкнулся с дорожным бампом. Пожалуйста, помогите мне со следующими вопросами:Помощь с SQL-агрегатными функциями

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

PK и FK указаны в поле «**». Мне нужно сгенерировать запросы, которые:

1) Список результатов оценочных заданий, показывающих: номер оценки, название оценки и средний показатель Raw. Я знаю, как использовать функцию avg для одного столбца, но для отображения чего-то для нескольких столбцов ... немного неуверенного здесь.

Моя попытка:

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

2) Отчет об обучающей регистрации с указанием: Учебник номер, день, номер, Репетитор обязанности и число учащихся. То же, что и функция avg, теперь для функции count. Это потребует 2 запроса?

3) Перечислите Raw Mark каждого учащегося в каждой из оценочных задач, показывая: Номер оценки, Название оценки, Студенческий номер, Имя студента, Сырье, Репетитор в порядке и времени. Сортировка по репетитору, день и время.

+0

звучит как домашнее задание, это? Вы должны взломать его, если у вас есть сообщение о достигнутом прогрессе. –

+0

@SQLrookie - Основываясь на том, что вы поставили в вопросе, вы, кажется, на правильном пути! Я предлагаю вам опубликовать все, что у вас есть, и люди здесь будут рады предложить вам способы улучшить его, если таковые имеются. – InSane

+0

Хорошо, я опубликую то, что у меня есть. – SQLrookie

ответ

0

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

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 

ИЛИ не используя левую присоединиться или имена псевдонимов таблиц

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

Спасибо, но меня не научили ЛЕВОЙ ПРИСОЕДИНЕНИЮ ... Есть ли другие методы? – SQLrookie

+0

В зависимости от структуры данных вы можете использовать INNER JOIN или даже просто ключевое слово JOIN. – JonVD

+0

Еще раз спасибо. Я посмотрю на остальных. – SQLrookie

Смежные вопросы