mysql怎么查询并统计数量

文 / @WordPress主题

MySQL怎么查询并统计数量

MySQL是现在最流行的开源关系型数据库管理系统,也是Web应用程序中最受欢迎的数据库之一。MySQL有很多的查询函数和操作符,其中COUNT()函数常常被用来统计查询结果数据行的数量,下面我们来看看如何使用COUNT()函数进行查询和统计。

查询语句基本格式

在MySQL中,使用SELECT语句进行查询并利用COUNT()函数统计查询结果的数量。

SELECT {*|<字段列名>} [FROM<表1>,<表2>… [WHERE<表达式> [GROUPBY<groupbydefinition> [HAVING<expression>[{<operator><expression>}…]] [ORDERBY<orderbydefinition>] [LIMIT[<offset>,]<rowcount>] ]

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

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

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

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

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

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

LIMIT[<offset>,]<rowcount>:该子句告诉MySQL每次显示查询出来的数据条数。

COUNT()函数的用法

COUNT()函数是MySQL中最常用的函数之一,其功能是统计数据表中包含的记录行的总数,或者根据查询结果返回列中包含的数据行数。它的使用方式如下:

- COUNT(*):计算表中总的行数,无论某列有数值或者为空值。
- COUNT(表达式):计算不包含NULL值的行数。
- COUNT(DISTINCT表达式):返回不包含NULL值的唯一行数。

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

示例操作

下面通过操作示例来更加具体了解如何使用COUNT()函数。

1. 新建一个数据表

首先,我们需要新建一个名为demo的数据表,并插入一些示例数据。

USEtestdb;
-- 创建一个名为demos的数据表
CREATE TABLE IF NOT EXISTS demos (
id INT AUTO_INCREMENT PRIMARY KEY,
val INT
);
-- 插入一些示例数据
INSERT INTO demos(val) VALUES(1),(1),(2),(2),(NULL),(3),(4),(NULL),(5);
-- 查询数据表中的数据
SELECT * FROM demos;

查询结果如下:

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

2. 使用COUNT(*)函数

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

SELECT COUNT(*) FROM demos;

查询结果如下:

+----------+
| COUNT(*) |
+----------+
| 9 |
+----------+

3. 使用WHERE子句查询满足条件的行数

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

SELECT COUNT(*) FROM demos WHERE val=2;

查询结果如下:

+----------+
| COUNT(*) |
+----------+
| 2 |
+----------+

4. 使用COUNT表达式计算不包含NULL值的行数

如果在COUNT函数中指定val列,则COUNT函数计数其val列仅包含非NULL值的所有行。

SELECT COUNT(*) FROM demos WHERE val=2;

查询结果如下:

+----------+
| COUNT(*) |
+----------+
| 2 |
+----------+

5. 使用DISTINCT统计唯一行数

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

SELECT COUNT(DISTINCT val) FROM demos;

查询结果如下:

+---------------------+
| COUNT(DISTINCT val) |
+---------------------+
| 5 |
+---------------------+

6. 使用GROUP BY子句进行分组统计

我们经常将COUNT函数与GROUP BY子句结合使用来统计不同分组中的数据。

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

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. 使用HAVING子句进行过滤

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

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 |
+---------------------------+----------+

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

SELECT productvendor, count(*) FROM products GROUP BY productvendor
HAVING 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 |
+-------------------------+----------+

8. 使用COUNT IF进行条件统计

COUNT IF可以使用COUNT函数中的控制流程功能,例如IF、IFNULL、CASE等来计数其值与条件匹配的行。例如,以下查询可以查找有多少被取消,暂停和有争议的订单:

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

查询结果如下:

+-----------+---------+----------+
| Cancelled | OnHold | Disputed |
+-----------+

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。