We use cookies to ensure you have the best browsing experience on our website. Please read our cookie policy for more information about how we use cookies.
- Prepare
- SQL
- Basic Join
- The Report
- Discussions
The Report
The Report
Sort by
recency
|
3581 Discussions
|
Please Login in order to post a comment
SET NOCOUNT ON;
SELECT CASE WHEN g.Grade < 8 THEN 'NULL' ELSE s.Name END AS Name, g.Grade, s.Marks FROM Students s JOIN Grades g ON s.Marks BETWEEN g.Min_Mark AND g.Max_Mark ORDER BY g.Grade DESC, CASE WHEN g.Grade >= 8 THEN s.Name ELSE NULL END asc, CASE WHEN g.Grade < 8 THEN s.marks ELSE NULL END asc; go
Since there's no ID to join the tables directly, we’re using Marks to join the table and match each student to a grade range. See line: ON Students.Marks BETWEEN Grades.MinMark AND Grades.MaxMark. I used to think you could only join tables using IDs, but this example shows you can also join using value-based conditions, like a range. Thought this might help others who are new to SQL like myself!
SELECT IF(Grades.Grade < 8, NULL, Students.Name) AS Name, Grades.Grade, Students.Marks FROM Students JOIN Grades ON Students.Marks BETWEEN Grades.Min_Mark AND Grades.Max_Mark ORDER BY Grades.Grade DESC, Students.Name, Students.Marks;
First, match every student’s marks to their grade using a JOIN.
If the grade is 8 or higher, show the student’s name. Otherwise, show NULL.
For sorting:
Put higher grades first.
Within high grades (≥ 8), sort students alphabetically by name.
Within low grades (< 8), sort students by marks in ascending order.
SELECT CASE WHEN g.Grade < 8 THEN NULL ELSE s.Name END AS Name, g.Grade, s.Marks FROM Students s JOIN Grades g ON s.Marks BETWEEN g.Min_Mark AND g.Max_Mark ORDER BY g.Grade DESC, CASE WHEN g.Grade >= 8 THEN s.Name ELSE s.Marks END;
can someone tell me what's wrong with my query-`
Without Using Join
SELECT CASE WHEN Marks >= 70 THEN Name ELSE 'NULL' END , (SELECT GRADE FROM GRADES WHERE Marks BETWEEN Min_Mark AND Max_Mark ) AS gr, Marks FROM Students ORDER BY gr DESC , Name
go