Sql 选择没有行符合条件的非唯一id
假设我有这个表,我想选择所有D都小于4的id。在这种情况下,它将只选择ID 1,因为2的D>4,而3的D>4Sql 选择没有行符合条件的非唯一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 | +----+---+-----
+----+---+------+
| 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我知道!这样看起来很简单,我不知道我怎么没想到!