MySQL中count(distinct col...)组合使用的注意要点详解

 更新时间:2024年08月09日 08:26:51   作者:PiaoYoung  
@count()是一个聚合函数,返回指定匹配条件的行数,开发中常用来统计表中数据、全部数据、不为null数据或者去重数据,这篇文章主要给大家介绍了关于MySQL中count(distinct col...)组合使用的注意要点,需要的朋友可以参考下

第一步:数据准备

mysql> select * from my_student;
+----+------------+-----------+--------+--------+
| id | number     | name      | sex    | addr   |
+----+------------+-----------+--------+--------+
|  1 | itcast0001 | Jim       | female | 北京   |
|  2 | itcast0002 | HanMeimei | female | 上海   |
|  3 | itcast0003 | Kate      | female | NULL   |
|  4 | itcast0004 | Tom       | male   | NULL   |
|  5 | itcast0005 | LinTao    | male   | NULL   |
|  6 | itcast0006 | 张越      | 女     | NULL   |
+----+------------+-----------+--------+--------+
6 rows in set (0.00 sec)

第二步:数据验证

1.distinct单字段去重

mysql> select distinct addr from my_student;
+--------+
| addr   |
+--------+
| 北京   |
| 上海   |
| NULL   |
+--------+
3 rows in set (0.00 sec)

2.count和distinct配合使用

1).count(distinct col) 计算该列除 NULL 之外的不重复行数。

    mysql> select count(distinct addr) from my_student;							①
	+----------------------+
	| count(distinct addr) |
	+----------------------+
	|                    2 |
	+----------------------+
	1 row in set (0.00 sec)
	
	-- 把上述SQL改写成 select count(1) from (select distinct col from ...) a; 
	mysql> select count(1) from (select distinct addr from my_student) a;		②
	+----------+
	| count(1) |
	+----------+
	|        3 |
	+----------+
	1 row in set (0.00 sec)

注意比较①和②的结果,是不同的.

2).count(distinct col1, col2) 如果其中一列全为 NULL,那么即使另一列有不同的值,也返回为 0。

    mysql> select distinct sex,addr from my_student;
	+--------+--------+
	| sex    | addr   |
	+--------+--------+
	| female | 北京   |
	| female | 上海   |
	| female | NULL   |
	| male   | NULL   |
	| 女     | NULL   |
	+--------+--------+
	5 rows in set (0.00 sec)
	
	mysql> select count(distinct sex,addr) from my_student;                     ③
	+--------------------------+
	| count(distinct sex,addr) |
	+--------------------------+
	|                        2 |
	+--------------------------+
	1 row in set (0.00 sec)

	mysql> select count(1) from (select distinct sex,addr from my_student) a;	④
	+----------+
	| count(1) |
	+----------+
	|        5 |
	+----------+
	1 row in set (0.00 sec)

注意比较③和④的结果,也是不同的.

3.上述同样的操作在oracle数据库验证

1).针对上述1)的场景在oracle数据库中验证后,count(distinct col)也是会计算该列除 NULL 之外的不重复行数,同MySQL一样

2).针对上述2)的场景,count(distinct col1, col2)的写法在oracle数据库中不支持.

总结

到此这篇关于MySQL中count(distinct col...)组合使用的注意要点的文章就介绍到这了,更多相关MySQL count(distinct col...)组合使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • CentOS 7下MySQL服务启动失败的快速解决方法

    CentOS 7下MySQL服务启动失败的快速解决方法

    CentOS 7下MySQL服务启动失败怎么办?下面小编就为大家带来一篇CentOS 7下MySQL服务启动失败的快速解决方法。现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-03-03
  • 解决mysql错误:Subquery returns more than 1 row问题

    解决mysql错误:Subquery returns more than 1 row问题

    这篇文章主要介绍了解决mysql错误:Subquery returns more than 1 row问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • 阿里云ECS centos6.8下安装配置MySql5.7的教程

    阿里云ECS centos6.8下安装配置MySql5.7的教程

    阿里云默认yum命令下的MySQL是5.17****,安装mysql5.7之前先卸载以前的版本。下面通过本文给大家介绍阿里云ECS centos6.8下安装配置MySql5.7的教程,需要的的朋友参考下吧
    2017-07-07
  • Mysql中的concat函数(拼接函数)详解

    Mysql中的concat函数(拼接函数)详解

    很多时候,我们需要将不同地方获得的字符串拼接在一起,此时就需要使用CONCAT和CONCAT_WS函数,这篇文章主要介绍了Mysql中的concat函数(拼接函数),需要的朋友可以参考下
    2023-02-02
  • 深入分析MySQL数据类型 DECIMAL

    深入分析MySQL数据类型 DECIMAL

    这篇文章主要介绍了MySQL数据类型 DECIMAL的相关资料,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2020-09-09
  • MySQL EXPLAIN语句的使用示例

    MySQL EXPLAIN语句的使用示例

    这篇文章主要介绍了MySQL EXPLAIN语句的使用示例,帮助大家更好的理解和学习使用MySQL,感兴趣的朋友可以了解下
    2021-03-03
  • Mysql8创建用户及赋权操作实战记录

    Mysql8创建用户及赋权操作实战记录

    一般在开发中,我们需要新建一个账户,并赋予某个数据库的访问权限,下面这篇文章主要给大家介绍了关于Mysql8创建用户及赋权操作的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • MySQL报错1040'Too many connections'的原因以及解决方案

    MySQL报错1040'Too many connections'的原因以及解决方案

    这篇文章主要给大家介绍了关于MySQL报错1040'Too many connections'的原因以及解决方案,文中通过实例代码以及图文介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • mysql临时表(temporary table)使用方法详解

    mysql临时表(temporary table)使用方法详解

    MySQL临时表在很多场景中都会用到,MySQL内部在执行复杂SQL时,需要借助临时表进行分组、排序、去重等操作,下面这篇文章主要给大家介绍了关于mysql临时表(temporary table)使用方法的相关资料,需要的朋友可以参考下
    2024-01-01
  • MySQL索引原理详解

    MySQL索引原理详解

    这篇文章主要介绍了MySQL索引原理详解,索引是帮助MySQL高效获取数据的排好序的数据结构,最重要的点是有序的,我们用索引就是为了快速的查找数据,如果一堆数据是无序的,程序只能挨个遍历每个元素
    2022-08-08

最新评论