rank如果只有0和1的话还好办,可以: select * from table group by name having count(distinct rank)=1 union select * from table where rank='1' group by name; 否则可能需要用临时表。 如果支持子查询的话一个语句就比较好写了。
不错,强!!! 但我觉得这样会更合理: select * from table group by name having max(rank)=0 union select * from table where rank='1' group by name;因为用count(distinct rank)=1来限定,有可能是一个name只有一个值,而刚好这个值为1,这样“Union”前后的都有找到这个值,如果记录较多,可能会影响性能。
那么,该题可以如下解决:select substring(max(concat(name,rank,lpad(id,4,'0'))),3,4)+0 as id, name, substring(max(concat(name,rank,lpad(id,4,'0'))),2,1)+0 as rank from source group by name谢谢犬犬,偶又学了一招。
select * from table group by name having count(distinct rank)=1 union select * from table where rank='1' group by name;
否则可能需要用临时表。
如果支持子查询的话一个语句就比较好写了。
但我觉得这样会更合理:
select *
from table
group by name
having max(rank)=0
union
select *
from table
where rank='1'
group by name;因为用count(distinct rank)=1来限定,有可能是一个name只有一个值,而刚好这个值为1,这样“Union”前后的都有找到这个值,如果记录较多,可能会影响性能。
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=6420
substring(max(concat(name,rank,lpad(id,4,'0'))),3,4)+0 as id,
name,
substring(max(concat(name,rank,lpad(id,4,'0'))),2,1)+0 as rank
from source
group by name谢谢犬犬,偶又学了一招。