通过对符合条件的列进行分组来显示等效列的值

时间:2019-04-03 14:38:40

标签: sql sqlite

我想按名称分组,如果GroupId由y组成,则y还有其他可用内容,并且我还希望等效项列的值。

ID  |  Name  |  GroupId  | Associate
 1  |    A   |     x     |   j
 2  |    A   |     y     |   k
 3  |    B   |     x     |   j
 4  |    C   |     z     |   j
 5  |    A   |     z     |   l
 6  |    B   |     y     |   m
 7  |    C   |     x     |   l

条件:按名称分组,并且如果COUNT(GroupId)> 1,并且如果任何GroupId为y,则显示y和相应的“关联”列值,否则,任何GroupId及其等效的“关联”都可以

预期结果:

Name  |  GroupId  |  Associate
  A   |     y     |    k
  B   |     y     |    m
  C   |     z     |    j

2 个答案:

答案 0 :(得分:2)

我在此问题中看不到值“ x”的条件(并且在这种情况下将不适用),所以:

select t.* 
from tablename t inner join (
select 
  name,
  case 
    when sum(case when groupid = 'y' then 1 end) > 0 then 'y'
    else max(groupid)
  end groupid   
from tablename
group by name
) g on g.name = t.name and g.groupid = t.groupid 

请参见demo

答案 1 :(得分:0)

这是您想要的吗?

select t.*
from t
where t.id = (select t2.id
              from t t2
              where t2.name = t.name
              order by (case when t2.groupid = 'y' then 1 else 2 end)
              limit 1
             );

这将返回一行带有“ y”(如果有)的