我有一个类似于下面的mysql结果集
id name
---------------------
1 abc
1 abc
2 xyz
2 xyz
3 pqr现在,我需要修改结果集,以便如下所示:
id name
---------------------
1 abc-1
1 abc-2
2 xyz-1
2 xyz-2
3 pqr总结是,我需要对结果集中的名称列进行编号,而编号只适用于结果集中有多个值的行。
那么,什么将是MySQL SELECT 查询?
发布于 2010-10-25 10:37:15
这也许可行,但也许还有更好的办法,我现在想不起来
set @i = 0;
select
f.id,
@i:=@i+1 as i,
case
when c.counter <= 1 then f.name
else concat(f.name,'-',(@i % c.counter) +1)
end as name
from
foo f
join (select id, count(*) as counter from foo group by id) c on c.id = f.id
order by
f.id,name;编辑:如上面的注释中所述,最好在应用程序级别和db之间这样做。
发布于 2010-10-25 10:33:08
我认为解决这一问题的方法有三种:
select t1.id, t1.name, count(t2.id) from t1, t2 where t1.id = t2.id group by t2.id (BTW,此查询可能需要O(N^2)时间,对于大型表来说是很长的时间),然后您将不得不分析第三列并获得最终结果。https://stackoverflow.com/questions/4013609
复制相似问题