#sql #oracle #database-design
#sql #Oracle #база данных-дизайн
Вопрос:
Это мой первый вопрос здесь, так что потерпите меня. В моей базе данных Oracle есть две таблицы следующим образом:
modules
с полями:
module_code
например. INF211module_title
например. Информационные технологииcredits
например.20
module_progress
с полями:
student_id
например. STU1module_code
например. INF211module_year
например. 1module_percent
например. 65
Каждый студент проходит 5 модулей в год.
Итак, это то, что я хочу поместить все это в один запрос / представление, если это возможно:
- Найти сумму процентов модуля для конкретного учащегося
- Найдите сумму всех кредитов для каждого модуля с учетом их модульных процентов.
- Разделите сумму процентов модуля на сумму кредитов и умножьте на 100, чтобы получить среднюю оценку.
Можно ли это сделать?
Комментарии:
1. Действительно ли необходим шаг 1? т.Е. существует ли когда-либо более одной записи в module_progress для данного student amp; module?
2. студент может иметь столько модулей, сколько захочет, при условии, что все они в сумме дают до 120 кредитов. Каждый модуль стоит 10 или 20 кредитов, так что, очевидно, у вас может быть максимум 12 модулей. Мне нужно было бы сделать следующее, чтобы вычислить среднюю оценку … . Для каждого модуля = (процент модуля / 10) * кредитов. Получите сумму этого результата, разделите на сумму кредитов и умножьте на 100. Имеет ли это смысл? Как бы мне это сделать??
Ответ №1:
SELECT student_id,
SUM(credits * module_percent) / SUM(credits) * 100.0
FROM module_progress mp
JOIN modules m
ON m.module_code = mp.module_code
GROUP BY
student_id
Комментарии:
1. Поскольку, как сказано в исходном сообщении, проценты хранятся как
65
, а не как0.65
, я думаю, вам следует разделить их на 100. Но поскольку также требуется умножить результат деления на 100, то в конечном итоге, я думаю, вам просто нужно удалить* 100.0
.2. это сработало как шарм, но я осознал важную проблему. Позвольте мне объяснить… каждый модуль может составлять 10 или 20 кредитов. Каждый год у студента достаточно модулей, чтобы добавить до 120 кредитов, поэтому мне нужно будет выполнить следующие вычисления, чтобы получить правильный среднегодовой балл… Мне нужно было бы сделать следующее для каждого модуля = (процент модуля / 10) * кредиты, а затем получить эту сумму и разделить ее на 120. Имеет ли это смысл? Как бы мне это сделать??
3. @JMoorhouse: не могли бы вы, пожалуйста, предоставить некоторые примеры данных и желаемый набор результатов?
4. Теперь я понял это. Опубликую ответ во вторник вечером, потому что именно тогда истекает мой крайний срок, и я не хочу, чтобы люди потенциально копировали мое решение и доставляли мне проблемы с университетом. Спасибо за ваше терпение и время. Вы очень помогли 🙂