假设我有如下定义的表Student

+ ----------------- + ----------------- + ------------- ---- +
| id | paperId | readFlag |
+ ----------------- + ----------------- + ------------- ---- +
| 1 | 1 | 1 |
+ ----------------- + ----------------- + ------------- ---- +
| 2 | 2 | 1 |
+ ----------------- + ----------------- + ------------- ---- +
| 3 | 3 | 1 |
+ ----------------- + ----------------- + ------------- ---- +
| 4 | 1 | 0 |
+ ----------------- + ----------------- + ------------- ---- +
| 5 | 2 | 1 |
+ ----------------- + ----------------- + ------------- ---- +
| 6 | 3 | 1 |
+ ----------------- + ----------------- + ------------- ---- +
| 7 | 4 | 1 |
+ ----------------- + ----------------- + ------------- ---- +


我想知道有多少个paperId恰好有一个记录或两个记录,其中两个记录的readFlag都设置为1

对于示例数据,答案为3(paperId的2、3和4)。

我将如何编写查询来做到这一点?

编辑:

我不想使用子查询,因为我有数百万条记录,并且执行子查询需要太多时间。

最佳答案

尝试这个 :

 SELECT COUNT(DISTINCT(paperId)) from STUDENT
        WHERE paperId NOT IN
        (SELECT DISTINCT(paperId)
        from STUDENT where readFlag = 0);


要么

 SELECT (SELECT COUNT(DISTINCT(paperID)) from student) -
        (SELECT COUNT(DISTINCT(paperID)) from student where readFlag=0);

09-25 13:21