用sql语句统计数据库某个字段中相同的数据有多少条?

说白了,统计数据库字段重复数据的数量依赖于GROUP BY+COUNT(),这是一个残酷的把戏。

我们先来说说最重要的事情。
去年我们运行了一个电子商务后端项目。
每天,客户都要求我们查看搜索次数最多的产品。
我们直接使用SQL 选择关键字,COUNT() AS 次 来自搜索日志 按关键字分组 按时间顺序排序 限制 1 0 仅此而已。
运行数百万数据并在几秒钟内获得结果。
不要告诉我是否有足够的内存或添加索引。
只需使用默认引擎即可。

还有一件事,有一次我遇到一个奇怪的需求,我必须统计每个用户同时在线的时间。
在这种情况下,我必须使用 GROUP BY 用户 ID,然后使用 SUM(datediff(end_time,start_time)) 来计算差异。
大概有3 000条数据,MySQL的默认引擎居然超时了。
后来我改用InnoDB,就成功了。
说实话,当时很混乱。

还有一个关键细节。
例如,在计算订单状态时,COUNT() 将计算所有行,即使状态为零。
但如果您只想计算已完成的订单,则必须使用 COUNT(status)。
这种差异可以使数据量减半。
很多人不重视这一点。

一开始我以为COUNT()和COUNT(1 )有区别,后来发现是错误的。
其实底层SQL COUNT()是统计行数的,COUNT(1 )使用了索引优化,但效果是一样的。
仅计数(主键)当您计算非主键列时,速度会更快。
等等,还有一件事。
如果所有字段都为空,COUNT()会报错,但COUNT(列名)可以正常工作。

建议下次写这类统计SQL时,先运行看看数据量,而不要只关注写法。
您认为哪个集合函数取决于您想要计算的内容?

sql去重,同一个字段出现多条取一条的sql语句

这就是坑。
别相信。
不要这样做。

用sql语句统计数据库某个字段中相同的数据有多少条?

结论:使用GROUP BY和COUNT()来统计字段值的个数是最简单的。

语法:选择字段,COUNT()从表中按字段分组。

分组依据:按字段对数据进行分组。

COUNT():统计每组中的记录数。

效率:COUNT()=COUNT(1 )。

主键:从主键计算速度最快。

NULL:COUNT() 包括 NULL,COUNT(field) 不包括 NULL。

就用它吧。