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 BY
和 HAVING
子句来做到这一点:
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 示例。
我有一个 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 BY
和 HAVING
子句来做到这一点:
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 示例。