MYSQL - 从多行,相同用户,不同值中选择

use*_*500 5 mysql

下面是我的名为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)

pet*_*erm 5

尝试

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演示