I have a table with subject and with marks. every subject has max and min marks, i need to update rows with their max and min marks for ever subject
subject | Marks |
---|---|
Maths | 95 |
Eng | 85 |
Maths | 90 |
Eng | 56 |
I need output table like below, whenever particular maths subject comes max should be 95 and min should be 90, same for eng subject as well
subject | Marks | maxmarks | minmarks |
---|---|---|---|
Maths | 95 | 95 | 90 |
Eng | 85 | 85 | 56 |
Maths | 90 | 95 | 90 |
Eng | 56 | 85 | 56 |
CodePudding user response:
You can use window functions:
select t.*,
max(marks) over (partition by subject) as max_marks,
min(marks) over (partition by subject) as min_marks
from t;
CodePudding user response:
On older versions of MySQL, we can join to a subquery which finds the min/max mark values for each subject:
SELECT t1.subject, t1.Marks, t2.maxmarks, t2.minmarks
FROM yourTable t1
INNER JOIN
(
SELECT subject, MIN(Marks) AS minmarks, MAX(Marks) AS maxmarks
FROM yourTable
GROUP BY subject
) t2
ON t2.subject = t1.subject;
CodePudding user response:
select distinct subject, max(marks) max_marks, min(marks) min_marks
from table
group by subject