Вычислите сумму одной строки и разделите на сумму другой строки. Представление Oracle / запрос

#sql #oracle #database-design

#sql #Oracle #база данных-дизайн

Вопрос:

Это мой первый вопрос здесь, так что потерпите меня. В моей базе данных Oracle есть две таблицы следующим образом:

modules с полями:

  • module_code например. INF211
  • module_title например. Информационные технологии
  • credits например.20

module_progress с полями:

  • student_id например. STU1
  • module_code например. INF211
  • module_year например. 1
  • module_percent например. 65

Каждый студент проходит 5 модулей в год.

Итак, это то, что я хочу поместить все это в один запрос / представление, если это возможно:

  1. Найти сумму процентов модуля для конкретного учащегося
  2. Найдите сумму всех кредитов для каждого модуля с учетом их модульных процентов.
  3. Разделите сумму процентов модуля на сумму кредитов и умножьте на 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. Теперь я понял это. Опубликую ответ во вторник вечером, потому что именно тогда истекает мой крайний срок, и я не хочу, чтобы люди потенциально копировали мое решение и доставляли мне проблемы с университетом. Спасибо за ваше терпение и время. Вы очень помогли 🙂