Курсор pl/sql, который вычисляет среднее значение и обновляет столбец, а также одновременно упорядочивает записи по этой рассчитанной средней сумме

У меня есть следующие таблицы, как показано на картинках.

Я хочу рассчитать среднее значение оценок для каждого учащегося {Avg = Sum (примечание * коэффициент) / Sum (коэффициенты)} а затем обновить столбец диапазона в таблице ETUDIANT в зависимости от среднего и пропустить диапазон для равных средних значений с помощью курсоров в PL/SQL! как на картинке ниже

Как можно подойти к этому, потому что я новичок в pl/sql в целом, и спасибо!

Я написал оператор выбора, который выбирает заметки и коэфф, это все, что я мог понять.

select NOTE,COEFFICIENT from notes left join module on notes.CODE_M = module.CODE_M order by notes.NOTE desc;

я ожидаю, по крайней мере, способ подойти к этой проблеме, и спасибо

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не используйте PL/SQL или курсоры, просто используйте SQL и оператор MERGE и агрегируйте примечания и коэффициенты, чтобы получить средневзвешенное значение для каждого учащегося, а затем используйте аналитическую функцию RANK для расчета диапазона:

MERGE INTO etudiant 
USING (
  SELECT n.code_e,
         SUM(n.note * m.coefficient) / SUM(m.coefficient) AS weighted_note,
         RANK() OVER (ORDER BY SUM(n.note * m.coefficient) / SUM(m.coefficient)) AS rnk
  FROM   notes n
         INNER JOIN module m
         ON (m.code_m = n.mode_m)
) c
ON (e.code_e = c.code_e)
WHEN MATCHED THEN
  UPDATE
  SET moyenne = c.weighted_note,
      rang    = c.rnk;

Если вам нужны пробелы, сделайте это при отображении данных:

SELECT NULLIF(rang, LAG(rang) OVER (ORDER BY moyenne DESC, code_e)) AS rang,
       code_e,
       nom,
       prenom,
       moyenne,
       spcialite
FROM   etudiant;

и как мне заставить его пропустить ранг для равных значений, как показано на первом рисунке, и спасибо за ответ!

Seffih Oualid Redouan 19.12.2022 16:21

@SeffihOualidRedouan Сделайте это в любом приложении, которое вы используете для извлечения данных из таблицы; не пытайтесь хранить пробелы в таблице.

MT0 19.12.2022 16:38

Другие вопросы по теме