假设我有如下定义的表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);