【问题标题】:How can I return all rows for a value where at least one row meets a condition?如何返回至少一行满足条件的值的所有行?
【发布时间】:2016-12-12 11:03:45
【问题描述】:

我正在尝试返回一个或多个 Num_Occurrence 行 >=10 的 ID 的所有行。

以下是原始数据的示例:

+------+-----------+----------------+
| ID   | YearMonth | Num_Occurrence |
+------+-----------+----------------+
| 1234 | 201601    | 7              |
+------+-----------+----------------+
| 1234 | 201602    | 8              |
+------+-----------+----------------+
| 1234 | 201603    | 12             |
+------+-----------+----------------+
| 1234 | 201604    | 9              |
+------+-----------+----------------+
| 9898 | 201601    | 9              |
+------+-----------+----------------+
| 9898 | 201602    | 8              |
+------+-----------+----------------+
| 9898 | 201603    | 9              |
+------+-----------+----------------+
| 9898 | 201604    | 6              |
+------+-----------+----------------+

这是所需的输出:

+------+-----------+----------------+
| ID   | YearMonth | Num_Occurrence |
+------+-----------+----------------+
| 1234 | 201601    | 7              |
+------+-----------+----------------+
| 1234 | 201602    | 8              |
+------+-----------+----------------+
| 1234 | 201603    | 12             |
+------+-----------+----------------+
| 1234 | 201604    | 9              |
+------+-----------+----------------+

我了解以下内容不起作用:

SELECT *
FROM tbl
WHERE Num_Occurrence >= 10

因为那只会返回这一行:

+------+-----------+----------------+
| ID   | YearMonth | Num_Occurrence |
+------+-----------+----------------+
| 1234 | 201603    | 12             |
+------+-----------+----------------+

如前所述,我需要返回 Num_Occurrence >=10 的任何 ID 的所有行。

谢谢!!

【问题讨论】:

  • 您可能需要使用 EXISTS 子句。

标签: sql postgresql


【解决方案1】:
SELECT * FROM [tbl] t1
WHERE EXISTS (SELECT * FROM [tbl] t2
              WHERE t2.ID = t1.id
              AND t2.Num_Occurrence >= 10);

此处的“EXISTS”子句使用子查询查找所有 Num_Occurrence >= 10 的行,然后将其与完整表进行比较以获取具有匹配 ID 的所有行。

【讨论】:

  • 你为什么要写和@Gordon一样的答案。他比你早 30 分钟写了答案。
  • (我还没有足够的声誉发表评论,所以提供正确答案似乎是合乎逻辑的方式)
  • @CoderofCode: t2.Num_Occurrence >= 10 正确,t2.id >= 10 错误。
【解决方案2】:

你可以这样做:

select t.*
from tbl t
where exists (select 1
              from tbl t2
              where t2.id = t.id and t2.id >= 10
             );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 2012-04-22
    相关资源
    最近更新 更多