SQL से Report Card Query
एक असली report card
Report card query एक classic school project है: marks की table से, हर student का total, percentage, grade और pass/fail निकालना। यह SUM, GROUP BY और CASE एक साथ लाता है — एक बढ़िया व्यावहारिक अभ्यास।
Marks table
-- प्रति student प्रति subject एक row +------------+---------+-------+ | student_id | subject | marks | +------------+---------+-------+ | 1 | Math | 88 | | 1 | Science | 76 | | 1 | English | 92 | +------------+---------+-------+
यह normalized layout (प्रति subject एक row) totals और averages आसान बनाता है, और table बदले बिना subjects जोड़ने देता है।
Total और percentage
SELECT student_id,
SUM(marks) AS total,
ROUND(SUM(marks) / (COUNT(*) * 100) * 100, 2) AS percent
FROM marks
GROUP BY student_id;
Student से GROUP BY, total को marks SUM, और percentage को अधिकतम (subjects × 100) से भाग, दो जगह round।
CASE से grade
SELECT student_id,
SUM(marks) AS total,
CASE
WHEN SUM(marks)/(COUNT(*)*100)*100 >= 90 THEN 'A'
WHEN SUM(marks)/(COUNT(*)*100)*100 >= 75 THEN 'B'
WHEN SUM(marks)/(COUNT(*)*100)*100 >= 33 THEN 'C'
ELSE 'F'
END AS grade
FROM marks
GROUP BY student_id;
Percentage पर CASE number को letter grade में बदलता है, query में ही।
Pass या fail
SELECT student_id,
CASE WHEN MIN(marks) >= 33 THEN 'Pass' ELSE 'Fail' END AS result
FROM marks
GROUP BY student_id;
Student सिर्फ़ तब pass होता है जब हर subject कम-से-कम pass mark हो। MIN(marks) >= 33 जाँचना किसी भी एक subject में failure पकड़ता है।
Students rank करना
SELECT student_id, SUM(marks) AS total,
RANK() OVER (ORDER BY SUM(marks) DESC) AS rank_no
FROM marks
GROUP BY student_id;
MySQL 8.0+ में, RANK() total marks से positions देता है, हर student को उनका class rank देकर। पुराने MySQL पर, बस ORDER BY total DESC।
आम गलतियाँ
- सारे subjects एक row में store करना। आसान SUM/AVG को प्रति subject एक row इस्तेमाल कीजिए।
- गलत percentage divisor। subjects × max marks से भाग कीजिए, fixed number नहीं।
- Pass जाँच से पहले grading। कम subject ऊँचे average को fail कर सकता है।
- GROUP BY भूलना। Aggregates को प्रति student काम करने को यह चाहिए।
सारांश
- Marks प्रति student प्रति subject एक row store कीजिए।
- Total = SUM(marks); percentage subjects × 100 से भाग।
- Grade को percentage पर CASE से।
- Pass/fail MIN(marks) को pass mark से इस्तेमाल करता है।
- ORDER BY total या RANK() (MySQL 8.0+) से rank कीजिए।
आगे, grouping सीखिए GROUP BY और HAVING में, या पूरा marksheet database project बनाइए।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
MySQL report card में total और percentage कैसे निकालूँ?
SUM(marks) AS total, SUM(marks)/(COUNT(*)*100)*100 AS percent। Student से GROUP BY कीजिए।Report card query में grade कैसे assign करूँ?
CASE WHEN percent >= 90 THEN 'A' WHEN percent >= 75 THEN 'B' ... ELSE 'F' END। यह numeric percentage को result में letter grade में बदलता है।MySQL में pass या fail कैसे दिखाऊँ?
CASE WHEN MIN(marks) >= 33 THEN 'Pass' ELSE 'Fail' END। Student fail होता है अगर कोई subject pass mark से नीचे हो।Students को उनके total marks से कैसे rank करूँ?
ORDER BY total DESC। Numbered rank को, MySQL 8.0+ में RANK() OVER (ORDER BY total DESC) इस्तेमाल कीजिए, जो हर student को उनके total के आधार पर position देता है।