满足条件时,SQL Group BY不保留则保留

时间:2019-03-09 15:41:28

标签: sql

很抱歉,如果以前曾问过这个问题。有人提出了类似的问题。这些已被记录,审查和应用,但未实现我想要的结果。我敢肯定,这大部分都是微不足道的。我希望能向正确的方向提供指导。基本上,我想要实现的是如果满足条件则将数据库中的一组项目组合在一起,然后将这些项目保留下来,即如果不满足则不进行分组。

Example 
=========
id   chk  chk2  chk3   
1    2     3     3    
2    2     3     3    
3    2     3     3       
4    3     2     2        
5    3     1     1       
6    5     1     1        

所需的输出

id   chk  chk2 chk3   
1     2    3    3       
4     3    2    2      
5     3    1    1      
6     5    1    1          

基本上,我要实现的是如果数量> 2,则按 chk 对任何内容进行分组,如果不是,则按原样保留。

如何实现?

我所做的如下:

SELECT * 
FROM db_name 
GROUP BY CASE WHEN COUNT(*)>2 THEN chk,chk2,chk3 ELSE NULL END

2 个答案:

答案 0 :(得分:0)

您可以尝试使用相关子查询

   select * from tablename a
     where id in (select min(id) from tablename b where a.chk=b.chk)

答案 1 :(得分:0)

使用UNION:

SELECT MIN(ID) ID, chk, chk2, chk3 
FROM db_name
where chk > 2
GROUP BY chk, chk2, chk3  
UNION ALL
SELECT ID, chk, chk2, chk3 
FROM db_name 
where chk <= 2