Return 个字段具有指定计数的行

Return rows where a field has a specified count

我有一个 table (DF)

+----+------+-----+
| ID |  PT  | AVG |
+----+------+-----+
| A  | 1.00 | 2.5 |
| A  | 2.00 | 3.5 |
| B  | 1.00 | 2.8 |
| B  | 2.00 | 2.6 |
| B  | 3.00 | 3.9 |
+----+------+-----+

我正在尝试编写一个简单的 SQL 语句来提取具有 3 个点的 ID。

我试过这两个语句,但我做错了

1. Returns all rows again

SELECT * FROM DF
WHERE PT BETWEEN '1.000' AND '3.000' 

2. Returns counts of rows

SELECT * FROM DF b    
WHERE b.PT=(SELECT COUNT(DISTINCT A.PT) FROM DF A WHERE A.ID=B.ID)

我想要的输出是:

+----+------+-----+
| ID |  PT  | AVG |
+----+------+-----+
| B  | 1.00 | 2.8 |
| B  | 2.00 | 2.6 |
| B  | 3.00 | 3.9 |
+----+------+-----+  
SELECT *
FROM YourTable
WHERE ID IN (SELECT ID
             FROM YourTable
             GROUP BY ID
             HAVING COUNT(*) = 3);

您首先需要找出哪些组的行数为三。您可以使用 GROUP BYHAVING 子句来做到这一点:

SELECT id
FROM myTable
GROUP BY id
HAVING COUNT(*) = 3;

HAVING 子句用于聚合条件,不要为此使用WHERE 子句。获得这些值后,您可以返回 select 来自 table 的所有行,其中 id 列是 IN 上面的结果集:

SELECT *
FROM myTable
WHERE id IN(
   SELECT id
   FROM myTable
   GROUP BY id
   HAVING COUNT(*) = 3);

这是一个使用您的示例数据的 SQL Fiddle 示例。