我想按名称分组,如果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
答案 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”(如果有)的
。