mysql 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;

插入几条模拟数据

5e9272264824bb200d86067987651283.png

如果我们想查询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

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

14840dd646a9eebadf132103cf5ec4a2.png

4c543699856e5c46adee68bfce7e44c1.png

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值