Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Joining mutiple select statements in one SQL statement

I am trying to join two sql statements into one but have had no success.

I would ideally like the Average query to be added to the end of the columns from the first sql statement.

First statement:

SELECT Modules.UserID, Module_Info.ModuleTitle, Modules.ModuleMarks, Modules.ExamMark, Modules.AssignmentMark, MarkClassification.MarkDescription
FROM Module_Info 
INNER JOIN Modules ON Module_Info.ModuleID = Modules.ModuleID 
INNER JOIN MarkClassification ON Modules.MarkCodeDescription = MarkClassification.MarkId
WHERE(Modules.UserID = '8')

Second statement:

SELECT AVG(Modules.ExamMark) AS Average    
FROM Module_Info     
INNER JOIN Modules ON Module_Info.ModuleID = Modules.ModuleID
WHERE (Modules.ModuleID = '2')
like image 395
Richard Quinn Avatar asked Apr 12 '26 23:04

Richard Quinn


2 Answers

You can use a sub query in the select for that, like this:

SELECT Modules.UserID, Module_Info.ModuleTitle, Modules.ModuleMarks,
       Modules.ExamMark, Modules.AssignmentMark, MarkClassification.MarkDescription,
       (SELECT AVG(Modules.ExamMark) 
        FROM Module_Info 
        INNER JOIN Modules ON Module_Info.ModuleID = Modules.ModuleID
        WHERE (Modules.ModuleID = '2')) as Average
FROM Module_Info 
INNER JOIN Modules
 ON Module_Info.ModuleID = Modules.ModuleID 
INNER JOIN MarkClassification
 ON Modules.MarkCodeDescription = MarkClassification.MarkId
WHERE(Modules.UserID = '8')
like image 179
sagi Avatar answered Apr 15 '26 00:04

sagi


you can try

SELECT * FROM

(SELECT Modules.UserID, Module_Info.ModuleTitle, Modules.ModuleMarks, Modules.ExamMark, Modules.AssignmentMark, MarkClassification.MarkDescription
FROM Module_Info
INNER JOIN Modules ON Module_Info.ModuleID = Modules.ModuleID
INNER JOIN MarkClassification ON Modules.MarkCodeDescription = MarkClassification.MarkId
WHERE(Modules.UserID = '8')) t1

JOIN

(SELECT AVG(Modules.ExamMark) AS Average
FROM Module_Info
INNER JOIN Modules ON Module_Info.ModuleID = Modules.ModuleID
WHERE (Modules.ModuleID = '2')) t2

Since you do not have a join condition, it will create a cartesian product of the two queries (i.e. each row of the first subselect, with each row of the second subselect). Since the 2nd subselect only has one row, it will give you your expected result.

like image 35
Ran Locar Avatar answered Apr 14 '26 23:04

Ran Locar



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!