选择非唯一ID,其中没有行符合条件

时间:2016-09-09 23:27:33

标签: sql postgresql

假设我有这个表,并且我想选择所有D都是<的ID。 4.在这种情况下,它只会选择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还不够好知道要google什么,所以如果之前有人询问我很抱歉。

3 个答案:

答案 0 :(得分:2)

以下是使用conditional aggregation的一个选项:

select id
from yourtable
group by id 
having count(case when d >= 4 then 1 end) = 0

如果您需要来自相应行/列的所有数据,您可以join使用上述内容返回表格,或者您可以使用not exists

select *
from yourtable t
where not exists (
    select 1 
    from yourtable t2
    where t.id = t2.id and
          t2.d >= 4
)

答案 1 :(得分:2)

我会这样做:

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;

答案 2 :(得分:0)

使用此查询。

从yourtablename中选择ID,其中D&lt; 4;