千家信息网

mysql如何查询并统计数量

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍mysql如何查询并统计数量,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在mysql中,可以使用SELECT语句查询数据,并利用COUNT()函数统计查询结果
千家信息网最后更新 2026年11月01日mysql如何查询并统计数量

这篇文章主要介绍mysql如何查询并统计数量,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

在mysql中,可以使用SELECT语句查询数据,并利用COUNT()函数统计查询结果的数量,语法"SELECT COUNT(*) FROM 表名 [...];"或"SELECT COUNT(字段名) FROM 表名 [...];"。

本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。

在mysql中,可以使用SELECT语句查询数据,并利用COUNT()函数统计查询结果的数量。

SELECT 的语法格式如下:

SELECT{* | <字段列名>}[FROM <表 1>, <表 2>…[WHERE <表达式>[GROUP BY [HAVING  [{ }…]][ORDER BY ][LIMIT[,] ]]

其中,各条子句的含义如下:

  • {*|<字段列名>}包含星号通配符的字段列表,表示所要查询字段的名称。

  • <表 1>,<表 2>…,表 1 和表 2 表示查询数据的来源,可以是单个或多个。

  • WHERE <表达式>是可选项,如果选择该项,将限定查询数据必须满足该查询条件。

  • GROUP BY< 字段 >,该子句告诉 MySQL 如何显示查询出来的数据,并按照指定的字段分组。

  • [ORDER BY< 字段 >],该子句告诉 MySQL 按什么样的顺序显示查询出来的数据,可以进行的排序有升序(ASC)和降序(DESC),默认情况下是升序。

  • [LIMIT[,]],该子句告诉 MySQL 每次显示查询出来的数据条数。

COUNT() 函数统计数据表中包含的记录行的总数,或者根据查询结果返回列中包含的数据行数

  • COUNT(*) 计算表中总的行数,无论某列有数值或者为空值。

  • COUNT(表达式) 计算不包含NULL值的行数。

  • COUNT(DISTINCT 表达式) 返回不包含NULL值的唯一行数

COUNT()函数的返回类型为BIGINT。 如果没有找到匹配的行,则COUNT()函数返回0。

MySQL COUNT示例

我们来创建一个名为demo的新表,并插入一些示例数据。

USE testdb;-- create a demos tableCREATE TABLE IF NOT EXISTS demos( id int auto_increment primary key, val int );-- insert some sample dataINSERT INTO demos(val)VALUES(1),(1),(2),(2),(NULL),(3),(4),(NULL),(5);-- select data from demos tableSELECT * FROM demos;

执行上面查询语句,得到以下结果 -

+----+------+| id | val  |+----+------+|  1 |    1 ||  2 |    1 ||  3 |    2 ||  4 |    2 ||  5 | NULL ||  6 |    3 ||  7 |    4 ||  8 | NULL ||  9 |    5 |+----+------+9 rows in set

要计算demos表中的所有行,请使用COUNT(*)函数,如下所示:

mysql> SELECT COUNT(*) FROM demos;+----------+| COUNT(*) |+----------+|        9 |+----------+1 row in set

您可以添加一个WHERE子句来指定一个条件来计数,例如,只计算val列包含值等于2的行,使用以下查询:

mysql> SELECT COUNT(*) FROM demos WHEREval = 2;+----------+| COUNT(*) |+----------+|        2 |+----------+1 row in set

如果在COUNT函数中指定val列,则COUNT函数计数其val列仅包含非NULL值的所有行。 请参阅以下查询:

SELECT COUNT(*) FROM demos WHEREval = 2;

val列中的两个NULL值将被忽略。

要计算demos表中的唯一行,可以将DISTINCT运算符添加到COUNT函数中,如下查询语句:

SELECT COUNT(DISTINCT val) FROM demos;

执行上面查询语句,得到以下结果 -

mysql> SELECT COUNT(DISTINCT val) FROM demos;+---------------------+| COUNT(DISTINCT val) |+---------------------+|                   5 |+---------------------+1 row in set

在计数中忽略两个重复值1,2和两个NULL值。

具有GROUP BY的MySQL COUNT

我们经常将COUNT函数与GROUP BY子句结合使用来统计不同分组中的数据。请参见以下products表的结构 -

mysql> desc products;+--------------------+---------------+------+-----+---------+------------------+| Field              | Type          | Null | Key | Default | Extra            |+--------------------+---------------+------+-----+---------+------------------+| productCode        | varchar(15)   | NO   | PRI |         |                  || productName        | varchar(70)   | NO   | MUL | NULL    |                  || productLine        | varchar(50)   | NO   | MUL | NULL    |                  || productScale       | varchar(10)   | NO   |     | NULL    |                  || productVendor      | varchar(50)   | NO   |     | NULL    |                  || productDescription | text          | NO   |     | NULL    |                  || quantityInStock    | smallint(6)   | NO   |     | NULL    |                  || buyPrice           | decimal(10,2) | NO   |     | NULL    |                  || MSRP               | decimal(10,2) | NO   |     | NULL    |                  || stockValue         | double        | YES  |     | NULL    | STORED GENERATED |+--------------------+---------------+------+-----+---------+------------------+10 rows in set

例如,要查找每个产品系列中的产品数量,可以使用COUNT函数与GROUP BY子句,如下查询所示:

SELECT productline, count(*) FROM products GROUP BY productline;

执行上面代码,得到以下结果 -

mysql> SELECT productline, count(*) FROM products GROUP BY productline;+------------------+----------+| productline      | count(*) |+------------------+----------+| Classic Cars     |       38 || Motorcycles      |       13 || Planes           |       12 || Ships            |        9 || Trains           |        3 || Trucks and Buses |       11 || Vintage Cars     |       24 |+------------------+----------+7 rows in set

要查找供应商提供的产品数量,请使用以下查询:

SELECT productvendor, count(*) FROM products GROUP BY productvendor;

执行上面代码,得到以下结果 -

mysql> SELECT productvendor, count(*) FROM products GROUP BY productvendor;+---------------------------+----------+| productvendor             | count(*) |+---------------------------+----------+| Autoart Studio Design     |        8 || Carousel DieCast Legends  |        9 || Classic Metal Creations   |       10 || Exoto Designs             |        9 || Gearbox Collectibles      |        9 || Highway 66 Mini Classics  |        9 || Min Lin Diecast           |        8 || Motor City Art Classics   |        9 || Red Start Diecast         |        7 || Second Gear Diecast       |        8 || Studio M Art Models       |        8 || Unimax Art Galleries      |        8 || Welly Diecast Productions |        8 |+---------------------------+----------+13 rows in set

要查找哪个供应商提供至少9个产品,您可以使用HAVING子句在COUNT函数中,如以下查询语句所示:

SELECT productvendor, count(*) FROM products GROUP BY productvendorHAVING count(*) >= 9;

执行上面代码,得到以下结果 -

mysql> SELECT productvendor, count(*) FROM products GROUP BY productvendorHAVING count(*) >= 9;+--------------------------+----------+| productvendor            | count(*) |+--------------------------+----------+| Carousel DieCast Legends |        9 || Classic Metal Creations  |       10 || Exoto Designs            |        9 || Gearbox Collectibles     |        9 || Highway 66 Mini Classics |        9 || Motor City Art Classics  |        9 |+--------------------------+----------+6 rows in set

MySQL COUNT IF

可以使用COUNT函数中的控制流程功能,例如IF,IFNULL,CASE等来计数其值与条件匹配的行。

例如,以下查询可以查找有多少被取消,暂停和有争议的订单:

SELECT COUNT(IF(status='Cancelled',1, NULL)) 'Cancelled',       COUNT(IF(status='On Hold',1, NULL)) 'On Hold',       COUNT(IF(status='Disputed',1, NULL)) 'Disputed'FROM orders;

执行上面代码,得到以下结果 -

mysql> SELECT COUNT(IF(status='Cancelled',1, NULL)) 'Cancelled',       COUNT(IF(status='On Hold',1, NULL)) 'On Hold',       COUNT(IF(status='Disputed',1, NULL)) 'Disputed'FROM orders;+-----------+---------+----------+| Cancelled | On Hold | Disputed |+-----------+---------+----------+|         6 |       4 |        3 |+-----------+---------+----------+1 row in set

如果订单的状态被取消,保留或有争议,IF函数将返回1,否则返回NULL。 COUNT函数只计数1,而不是NULL值,因此查询根据相应的状态返回订单数。

以上是"mysql如何查询并统计数量"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

查询 函数 数据 结果 子句 数量 统计 语句 产品 代码 字段 两个 条件 订单 供应商 内容 升序 状态 示例 篇文章 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网黑科技 互联网科技金融公司 长亮科技 互联网金融 互联网科技公司做什么 互联网和高科技公司 江苏南京365互联网科技 宁波青枫互联网科技有限公司 福州新华互联网科技学校 知乎 宁夏众和广鑫互联网科技有限公司 健康食品互联网创新科技园项目 996高科技互联网公司 浙南科技城互联网大厦建设工程 华夏恒生互联网科技013171 内蒙古九一互联网科技 锡山区互联网智能科技产品供应 互联网科技数字货币 互联网科技融合创新 互联网金融运营模式中的金融科技 兰石爱特工业互联网科技分公司 亚光科技低轨卫星互联网 百单网互联网科技有限公司 广州万易互联网科技有限公司 礼当家互联网科技 互联网科技视频 远拓互联网科技 上海亿帐通互联网科技 互联网 科技服务平台 南平创想时代互联网科技有限公司 玉溪互联网科技怎么选 互联网科技与大数据专业
0