1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > mysql count group by_MySQL中使用count与group by 的统计问题

mysql count group by_MySQL中使用count与group by 的统计问题

时间:2021-11-13 02:02:03

相关推荐

mysql count group by_MySQL中使用count与group by 的统计问题

在日常开发过程中难免遇到分组去重的业务场景。

比如说在门店几分流水表中统计一下各个门店的流水记录数据,包括流水记录总数和流水记录明细。那么问题来了!

首先看表结构CREATE TABLE `shop_point` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`shop_id` int(11) NOT NULL DEFAULT '0',

`point` int(11) DEFAULT '0',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

插入几条模拟数据

如果我们想查询1号门店的数据列表,那么很自然的会写出下面的sql语句SELECT * FROM `shop_point` WHERE shop_id = 1

那这个时候记录总数该如何算呢,因为会牵扯到分页逻辑。

所以,这就是今天想说的问题。

首先,简单粗暴的方法就是直接查询说所有的记录,然后用程序进行数组大小计算。不过在数据量较小的情况下还是可以临时用一下的。因为数组非常大的情况下,第一查询速度会特别慢,第二就算查出来以后代码进行计算有可能也会内存溢出。

不妨试一试下面的sql语句SELECT count(*) FROM (SELECT shop_id FROM shop_point GROUP BY shop_id) t

这样会直接返回记录的数值。

注意最后面的那个t不可以省略,需要定义一个别名,不一定叫t也可以是其他字符。

从上面的语句可以看出,使用group by后统计到的是分组后的结果集,然后再在外面套一层count就得到了最终想要的记录总数。

不过在和朋友讨论后发现还有一种写法也可以实现上面的需求,直接贴一下语句SELECT COUNT(DISTINCT shop_id) FROM shop_point

此写法简单明了,而且效率上还是比上一种高一点的。通过执行计划就可以看出。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。