mysql count的作用是什么


mysql count是一个聚合函数,用于返回指定匹配条件的行数;count函数的使用语法如“select count(*) from user;”,表示统计所有的记录,包括NULL。

1. COUNT()函数概述

COUNT() 是一个聚合函数,返回指定匹配条件的行数。开发中常用来统计表中数据,全部数据,不为NULL数据,或者去重数据。

2. COUNT()参数说明

COUNT(1):统计不为NULL 的记录。
COUNT(*):统计所有的记录(包括NULL)。

COUNT(字段):统计该"字段"不为NULL 的记录。

    如果这个字段是定义为not null的话,一行行地从记录里面读出这个字段,判断不能为null,按行累加。

    如果这个字段定义允许为null的话,判断到有可能是null,还要把值取出来在判断一下,不是null才累加。

    COUNT(DISTINCT 字段):统计该"字段"去重且不为NULL 的记录。

    --MySql统计函数count测试
    --创建用户表,新增测试数据
    CREATETABLE`user`(
    `id`bigint(20)unsignedNOTNULLAUTO_INCREMENTCOMMENT'ID主键',
    `name`varchar(64)DEFAULTNULLCOMMENT'姓名',
    `sex`varchar(8)DEFAULTNULLCOMMENT'性别',
    `age`int(4)DEFAULTNULLCOMMENT'年龄',
    `born`dateDEFAULTNULLCOMMENT'出生日期',
    PRIMARYKEY(`id`)
    )ENGINE=InnoDBDEFAULTCHARSET=utf8mb4ROW_FORMAT=DYNAMICCOMMENT='用户表';

    INSERTINTO`category`.`user`(`id`,`name`,`sex`,`age`,`born`)VALUES(1,'%张三%','男',22,'2022-04-22');
    INSERTINTO`category`.`user`(`id`,`name`,`sex`,`age`,`born`)VALUES(2,'李四','女',12,'2022-04-01');
    INSERTINTO`category`.`user`(`id`,`name`,`sex`,`age`,`born`)VALUES(3,'王小二','女',12,'2022-04-28');
    INSERTINTO`category`.`user`(`id`,`name`,`sex`,`age`,`born`)VALUES(4,'赵四','男',23,'2022-04-28');
    INSERTINTO`category`.`user`(`id`,`name`,`sex`,`age`,`born`)VALUES(5,'','女',23,'2022-04-28');
    INSERTINTO`category`.`user`(`id`,`name`,`sex`,`age`,`born`)VALUES(6,NULL,'女',60,'2022-04-28');
    INSERTINTO`category`.`user`(`id`,`name`,`sex`,`age`,`born`)VALUES(7,NULL,'女',61,'2022-04-28');

    select*fromuser;

    --统计数据:7条数据,统计所有的记录(包括NULL)。
    selectcount(*)fromuser;

    --统计数据:7条数据,统计不为NULL的记录。
    selectcount(1)fromuser;

    --统计数据:5条数据,COUNT(字段):统计该"字段"不为NULL的记录,注意是null不是空''字符串
    selectcount(name)fromuser;

    --统计数据:5条数据,COUNT(DISTINCT字段):统计该"字段"去重且不为NULL的记录。
    selectcount(distinctname)fromuser;

    3. COUNT()判断存在

    SQL不再使用count,而是改用LIMIT 1,让数据库查询时遇到一条就返回,不要再继续查找还有多少条了,业务代码中直接判断是否非空即可。
    select 1 from emp LIMIT 1;效率是最高的,尤其是需要limit限制行数,很容易忽略。

    --SQL查找是否"存在"
    --员工表,存在则进行删除
    droptableifEXISTSemp;
    createtableemp(
    idintunsignedprimarykeyauto_increment,
    empnomediumintunsignednotnulldefault0,
    empnamevarchar(20)notnulldefault"",
    jobvarchar(9)notnulldefault"",
    mgrmediumintunsignednotnulldefault0,
    hiredatedatetimenotnull,
    saldecimal(7,2)notnull,
    comndecimal(7,2)notnull,
    depnomediumintunsignednotnulldefault0
    );

    --新增cehsi数据
    测试数据:https://blog.csdn.net/m0_37583655/article/details/124385347

    --cahxun
    select*fromemp;

    --时间:1.082s,数据:5000000
    explainselectcount(*)fromemp;

    idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra
    1SIMPLESelecttablesoptimizedaway

    --时间:1.129s,数据:5000000
    explainselectcount(1)fromemp;
    idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra
    1SIMPLESelecttablesoptimizedaway

    --时间:1.695s,数据:5000000
    explainselect1fromemp;
    idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra
    1SIMPLEempidx_emp_depno34981060100.00Usingindex

    --SQL不再使用count,而是改用LIMIT1,让数据库查询时遇到一条就返回,不要再继续查找还有多少条了,业务代码中直接判断是否非空即可
    --时间:0.001s,数据:5000000
    explainselect1fromempLIMIT1;
    idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra
    1SIMPLEempidx_emp_depno34981060100.00Usingindex

    4. COUNT()阿里开发规范

    1.【强制】不要使用 count(列名)或 count(常量)来替代 count(),count()是 SQL92 定义的标 准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关. 说明:count(*)会统计值为 NULL 的行,而 count(列名)不会统计此列为 NULL 值的行.

    2.【强制】count(distinct col) 计算该列除 NULL 之外的不重复行数,注意 count(distinct col1, col2) 如果其中一列全为 NULL,那么即使另一列有不同的值,也返回为 0.


    上一篇:mysql insert返回值指的是什么

    下一篇:mysql fabric的概念是什么


    mysql count
Copyright © 2002-2019 飞翔范文网 fhm8.cn 皖ICP备2020016292号-5
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!QQ:251442993
热门搜索 网站地图