我有一个名为GUYS(ID,NAME,PHONE)的表,我需要添加一个有多少个同名的人,同时显示所有这些表,所以我无法对它们进行分组.
例:
例:
ID NAME PHONE 1 John 335 2 Harry 444 3 James 367 4 John 742 5 John 654
想要的输出应该是
ID NAME PHONE COUNT 1 John 335 3 2 Harry 444 1 3 James 367 1 4 John 742 3 5 John 654 3
我该怎么办?我只想得到很多不同的人.
谢谢
解决方法
由于MysqL没有
analytical functions like Oracle,所以你不得不诉诸一个子查询.
不要使用GROUP BY,使用子选择来计算同名的人数:
SELECT t.name,t.phone,(SELECT COUNT('x') FROM Guys ct WHERE ct.name = t.name) as namecounter FROM Guys t
你会认为,为每一行运行一个子选择将是缓慢的,但如果你有正确的索引,MysqL将优化这个查询,你会看到它运行正常.
在这个例子中,你应该有一个Guys.name的索引.如果子查询的where子句中有多个列,则查询可能会受益于所有列的单个组合索引.