【MySQL】关于count()函数后面加了多个参数这回事

我是从哪里发现这个问题的

在牛客网做SQL126 平均活跃天数和月活人数这道题时,因为过不了这道题,所以就去看了题解。

在这里插入图片描述

当时看着这个代码我就懵逼了,当时以为count()函数后面能加多个参数。
就在想如果多个参数的话,count()函数会怎么统计呢?😕😕😕
想了半天,最后还是去百度去了。
去搜了count()函数的官方声明后,终于明白了。
后来通过对比输出也发现了问题。😂😂😂

如果你有一样的疑惑,请一定要看下去。

count()函数的官方声明

COUNT(DISTINCT expr,[expr...])

其实,count()函数可以有多个参数。
第一个参数是DISTINCT expr,比如DISTINCT name
后面的参数可有可无,且是可变参数,意思是后面再加多少个字段都可以。

解决疑惑

其实,我们被疑惑的点在于distinct关键字。就像下面的代码一样。

count(distinct id, name)

加了多个参数后,distinct id, name的意思是在结果集中,
id或者name都其中一个不一样就算一条记录,用例子来解释就好理解了。
比如:

+----+------+-----+
| id | name | age |
+----+------+-----+
|  1 | jack |  12 |
|  2 | jack |  22 |
+----+------+-----+
  • name都是jack
  • id不一样,所以执行count(distinct id, name),结果就为两条记录
  • id=1,name=jack为一条记录,id=2,name=jack算一条记录。

现有记录如下的表:

+----+------+-----+
| id | name | age |
+----+------+-----+
|  1 | jack |  12 |
|  1 | jack |  22 |
|  2 | jack |  18 |
|  3 | john |  22 |
+----+------+-----+

count()函数只传一个参数的情况:

mysql> SELECT COUNT(DISTINCT name) FROM student;

+----------------------+
| COUNT(DISTINCT name) |
+----------------------+
|                    2 |
+----------------------+
1 row in set (0.02 sec)

count()函数传多个参数的情况:

mysql> SELECT COUNT(DISTINCT id, name) FROM student;

+--------------------------+
| COUNT(DISTINCT id, name) |
+--------------------------+
|                        3 |
+--------------------------+
1 row in set (0.04 sec)

到这里你应该明白自己错在哪里了,点个赞不过分吧!!!😁

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值