У меня проблемы с вычислением оценок учеников на основе определенного типа оценок.
У меня есть следующие таблицы
Subject
-------------------
Subid [PK]
subjectTitle
Topic
----------------
Tid (TopicID) [PK]
SubId (Subjectid) [FK]
Designation
WeightOfSubject
Marking
-------------------
pid (PersonID) [PK][FK]
Tid (TopicID) [PK][FK]
Points
Person
------------------------
pid (PersonId) [PK]
firstname
lastname
Sex
В сочетании со следующими данными.
Subject Data
Subid
AA001 Arts
AA002 Crafts
Topic Data
Tid Subid Designation WeightOfSubject
001 AA001 S1 30
002 AA001 S2 30
003 AA001 S3 40
004 AA002 S1 50
005 AA002 S2 50
Marking DATA
Pid Tid Points(out of 100)
P01 001 33
P01 002 62
P01 003 81
P01 004 85
P01 005 63
P02 001 74
P02 002 72
P02 003 45
P02 004 63
P02 005 88
Person DATA
pid firstname lastname sex
P01 Josh Draxler M
P02 John Doe M
То, что я хотел бы сделать с этим, это умножить отметки на их вес, а затем сложить все взвешенные оценки вместе, чтобы получить среднее общее взвешенное для каждого предмета, который они сделали (с окончательным результатом, отображающим идентификаторы предметов,человек, и его средневзвешенная оценка в процентах.)
Хотя мой MYSQL в лучшем случае посредственный, я попробовал и объяснил следующее (я знаю, что это неправильно с милей, не волнуйтесь.)
SELECT Topic.Designation, Subject.Subid, Subject.subjectTitle, Person.firstname, Person.lastname, AVG(Topic.WeightOfSubject/100*Marking.Points)
FROM Topic, Subject, Person, Marking
WHERE Person.pid = 'P01'
AND Marking.Points = 33
AND Topic.WeightOfSubject = 30
Это нормально только для одного человека, но я не уверен, как построить такой запрос для более чем одного человека и более чем одного субъекта. Я ищу в JOINS итакое, но это действительно не помогло мне в том, как я мог построить запрос для моей конкретной проблемы.Вот вывод, который я хотел бы ожидать:
Pid Firstname Lastname subjectTitle Result(WeightedAverage)
001 Josh Draxler Arts (Weighted Average Here)
Любая помощь приветствуется.