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子句中有多个列,则查询可能会受益于所有列的单个组合索引.

相关文章

(一)日志传送架构 (1.1)相关服务器 主服务器 :用于生产的服务器,上面运行这生产SQL Server数据库...
(一)事故背景 最近在SQL Server 2012生产数据库上配置完事物复制(发布订阅)后,生产数据库业务出现了...
(一)测试目的 目前公司使用的SQL SERVER 2012高可用环境为主备模式,其中主库可执行读写操作,备库既...
(一)背景个人在使用sql server时,用到了sql server的发布订阅来做主从同步,类似MySQL的异步复制。在...
UNION和OR谓词 找出 product 和 product2 中售价高于 500 的商品的基本信息. select * from product wh...
datawhale组队学习task03