下面是我的名为fittest的表格.我需要找到哪些学生根据学生ID(studid)进行了前置栏中指定的前后测试.因此,基于下面的简单表格,我需要返回studid 123456.如何为此编写SELECT查询?
SQL query: SELECT studid, prepost FROM `fittest` LIMIT 0, 30 ;
studid prepost
123456 pre
123456 post
1031460 pre
Run Code Online (Sandbox Code Playgroud)
尝试
SELECT studid
FROM fittest
GROUP BY studid
HAVING COUNT(DISTINCT prepost) = 2
Run Code Online (Sandbox Code Playgroud)
或者,如果您想确保只有 id 恰好具有一排pre和一排,post那么您可以像这样强制执行它
SELECT studid
FROM fittest
GROUP BY studid
HAVING (MAX(prepost = 'pre' ) +
MAX(prepost = 'post')) = 2
AND COUNT(DISTINCT prepost) = 2
Run Code Online (Sandbox Code Playgroud)
输出:
| 学生 | ---------- | 123456 |
这是两个查询的SQLFiddle演示