Sql 选择没有行符合条件的非唯一id

Sql 选择没有行符合条件的非唯一id,sql,postgresql,Sql,Postgresql,假设我有这个表,我想选择所有D都小于4的id。在这种情况下,它将只选择ID 1,因为2的D>4,而3的D>4 +----+---+------+ | ID | D | U-ID | +----+---+------+ | 1 | 1 | a | +----+---+------+ | 1 | 2 | b | +----+---+------+ | 2 | 5 | c | +----+---+------+ | 3 | 5 | d | +----+---+-----

假设我有这个表,我想选择所有D都小于4的id。在这种情况下,它将只选择ID 1,因为2的D>4,而3的D>4

+----+---+------+
| ID | D | U-ID |
+----+---+------+
| 1  | 1 | a    |
+----+---+------+
| 1  | 2 | b    |
+----+---+------+
| 2  | 5 | c    |
+----+---+------+
| 3  | 5 | d    |
+----+---+------+
| 3  | 2 | e    |
+----+---+------+
| 3  | 3 | f    |
+----+---+------+
我真的不知道从哪里开始对此进行查询,而且我的sql还不够好,不知道谷歌应该做什么,所以如果以前有人问过这个问题,我很抱歉

使用此查询

从表名中选择ID,其中D<4

使用此查询

从表名中选择ID,其中D<4

这里有一个使用条件聚合的选项:

如果需要来自相应行/列的所有数据,可以使用上述方法连接回表,也可以使用not exists:

这里有一个使用条件聚合的选项:

如果需要来自相应行/列的所有数据,可以使用上述方法连接回表,也可以使用not exists:

我只想:

select id
from table
group by id
having max(d) < 4;
如果您碰巧想要所有原始行,我将使用窗口函数:

select t.*
from (select t.*, max(d) over (partition by id) as maxd
      from t
     ) t
where maxd < 4;
我只想:

select id
from table
group by id
having max(d) < 4;
如果您碰巧想要所有原始行,我将使用窗口函数:

select t.*
from (select t.*, max(d) over (partition by id) as maxd
      from t
     ) t
where maxd < 4;

但当我只想1使用子查询并处理它时,我得到1,1,3,3。i、 例如,从表中选择不同的ID,其中ID不在表中,从表中选择ID,其中D>=4;但当我只想1使用子查询并处理它时,我得到1,1,3,3。i、 例如,从表中选择不同的ID,其中ID不在表中,从表中选择ID,其中D>=4;谢谢-我不得不稍微修改一下,因为我在where子句中得到了一个关于聚合函数的错误,但这对我来说是有效的:从表group by id中选择id,该id具有maxd<4@sgeddes我知道!这样看起来很简单,我不知道我怎么没想到!谢谢-我不得不稍微修改一下,因为我在where子句中得到了一个关于聚合函数的错误,但这对我来说是有效的:从表group by id中选择id,该id具有maxd<4@sgeddes我知道!这样看起来很简单,我不知道我怎么没想到!