sql – 没有组计数

前端之家收集整理的这篇文章主要介绍了sql – 没有组计数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个名为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子句中有多个列,则查询可能会受益于所有列的单个组合索引.

猜你在找的MsSQL相关文章