MySql - 动态逻辑计算器

MySql - Dynamic logic calculator

请在下方找到Table“MarkCompare”

SEMESTER - PAPER - TEACHER 1 - TEACHER 2
1        - ENG   - PASS      - PASS
1        - MATH  - PASS      - FAIL
2        - ENG   - PASS      - FAIL
2        - MATH  - FAIL      - FAIL

我想计算如下逻辑

No.Of.Times 两位老师给出相同的结果/第一位老师两位老师的结果不同的事件总和

我正在写这样的查询

select count(*) from MarkCompare where teacher1=teacher2 where paper='ENG' / (select count(*) from MarkCompare where teacher1<>teacher2 where paper='ENG')
select count(*) from MarkCompare where teacher1=teacher2 where paper='MATH' / (select count(*) from MarkCompare where teacher1<>teacher2 where paper='MATH')

现在,将来论文的数量可能会增加或减少...我无法为任何数量的论文找到 运行 的动态查询。

有没有办法不用任何 procedure/function,只需要一个查询就可以做到这一点

您可以使用 GROUP BY 子句聚合 table 中列出的每个 paper 的结果。

SELECT paper,
       SUM(CASE WHEN teacher1 = teacher2 THEN 1 ELSE 0 END) AS AgreeCount,
       SUM(CASE WHEN teacher1 <> teacher2 THEN 1 ELSE 0 END) AS DisagreeCount
    FROM MarkCompare
    GROUP BY paper;