入力は次のとおりです。
+--------+-------+----------+----------+
| RESULT | EXMID | EXSUBJID | SID |
+--------+-------+----------+----------+
| 11 | 4 | 6 | Student4 |
| 12 | 4 | 6 | Student3 |
| 25 | 4 | 6 | Student5 |
| 45 | 4 | 10 | Student8 |
| 12 | 4 | 10 | Student4 |
| 100 | 4 | 10 | Student5 |
| 12 | 4 | 10 | Student3 |
+--------+-------+----------+----------+
私は、さまざまな科目の特定の試験に出ている学生のリストを含むこの表を持っています。
合計科目数は、試験の科目数の合計です。合格は、いずれかの教科で合格した学生のステータスを表し、不合格は、いずれかの教科で不合格だった学生のステータスを表します。
ここでの問題は、合格、不合格、および試験の学生の合格率の合計数です。生徒がいずれかの科目で失敗した場合、その生徒は失敗です。
いろいろ試してみましたが、結果が得られませんでした。
これは私が得ているものです:
+----------+------------+------+------+--------------+
| STUDENT | TOTAL_SUBJ | PASS | FAIL | PASS_PERCENT |
+----------+------------+------+------+--------------+
| Student3 | 2 | 1 | 1 | 50.00 |
| Student4 | 2 | 0 | 2 | 0.00 |
| Student5 | 2 | 2 | 0 | 100.00 |
| Student8 | 2 | 1 | 0 | 100.00 |
+----------+------------+------+------+--------------+
誰でも良い解決策を提供できますか?
上記の出力に対するクエリは次のとおりです。
SELECT DISTINCT exreslt.SID AS STUDENT,
COUNT(exsubj.EXSUBJID) AS TOTAL_SUBJ,
SUM(exreslt.RESULT >= exsubj.PASS) AS PASS,
SUM(exreslt.RESULT < exsubj.PASS) AS FAIL,
ROUND(SUM(exreslt.RESULT >= exsubj.PASS)*100/ COUNT(exreslt.SID),2) AS 'PASS_PERCENT'
FROM EXAMSUBJ AS exsubj
STRAIGHT_JOIN EXAMRESULT AS exreslt
WHERE exsubj.EXSUBJID = exreslt.EXSUBJID AND exsubj.EXMID = exreslt.EXMID AND exsubj.EXMID=4 GROUP BY exreslt.SID ;
出力を
+----------+------------+------+------+--------------+
| STUDENT | TOTAL_SUBJ | PASS | FAIL | PASS_PERCENT |
+----------+------------+------+------+--------------+
| 4 | 2 | 2 | 2 | 50.00 |
+----------+------------+------+------+--------------+
いずれかの科目で不合格になった生徒は、不合格とみなされます。