我是从哪里发现这个问题的
在牛客网做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)
到这里你应该明白自己错在哪里了,点个赞不过分吧!!!😁