집 >데이터 베이스 >MySQL 튜토리얼 >mysql에서 수량을 쿼리하고 계산하는 방법
mysql에서는 SELECT 문을 사용하여 데이터를 쿼리하고 COUNT() 함수를 사용하여 쿼리 결과 수를 계산할 수 있습니다. 구문은 "SELECT COUNT(*) FROM table name [...];"입니다. "SELECT COUNT(필드 이름) FROM 테이블 이름[...];".
이 튜토리얼의 운영 환경: windows7 시스템, mysql8 버전, Dell G3 컴퓨터.
mysql에서는 SELECT 문을 사용하여 데이터를 쿼리할 수 있고, COUNT() 함수를 사용하여 쿼리 결과의 개수를 계산할 수 있습니다.
SELECT
구문 형식은 다음과 같습니다.SELECT
的语法格式如下:
SELECT {* | <字段列名>} [ FROM <表 1>, <表 2>… [WHERE <表达式> [GROUP BY <group by definition> [HAVING <expression> [{<operator> <expression>}…]] [ORDER BY <order by definition>] [LIMIT[<offset>,] <row count>] ]
其中,各条子句的含义如下:
{*|91f4a644069eb08f05815c14fcb8b2df}
包含星号通配符的字段列表,表示所要查询字段的名称。
1db5ee5e96c8774919312b86ea1e4ece,e612022ea012f486e2b8f4eb394bb6e0…
,表 1 和表 2 表示查询数据的来源,可以是单个或多个。
WHERE a8db8f1ba937e93d98acf65ecbbdce13
是可选项,如果选择该项,将限定查询数据必须满足该查询条件。
GROUP BY628258a999ccbeb31a9b66d6d3301cc9
,该子句告诉 MySQL 如何显示查询出来的数据,并按照指定的字段分组。
[ORDER BY628258a999ccbeb31a9b66d6d3301cc9]
,该子句告诉 MySQL 按什么样的顺序显示查询出来的数据,可以进行的排序有升序(ASC)和降序(DESC),默认情况下是升序。
[LIMIT[ab76cfca1a1dc7ff1291dcdf873f72ec,]bc984d207842008469e14f06321b6461]
,该子句告诉 MySQL 每次显示查询出来的数据条数。
COUNT()
函数统计数据表中包含的记录行的总数,或者根据查询结果返回列中包含的数据行数
COUNT(*)
计算表中总的行数,无论某列有数值或者为空值。
COUNT(表达式)
计算不包含NULL
值的行数。
COUNT(DISTINCT 表达式)
返回不包含NULL
值的唯一行数
COUNT()函数的返回类型为BIGINT
。 如果没有找到匹配的行,则COUNT()函数返回0
。
我们来创建一个名为demo
的新表,并插入一些示例数据。
USE testdb; -- create a demos table CREATE TABLE IF NOT EXISTS demos( id int auto_increment primary key, val int ); -- insert some sample data INSERT INTO demos(val) VALUES(1),(1),(2),(2),(NULL),(3),(4),(NULL),(5); -- select data from demos table SELECT * 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 WHERE val = 2; +----------+ | COUNT(*) | +----------+ | 2 | +----------+ 1 row in set
如果在COUNT
函数中指定val
列,则COUNT
函数计数其val
列仅包含非NULL
值的所有行。 请参阅以下查询:
SELECT COUNT(*) FROM demos WHERE val = 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
值。
我们经常将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 productvendor HAVING count(*) >= 9;
执行上面代码,得到以下结果 -
mysql> 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 | +--------------------------+----------+ 6 rows in set
可以使用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
rrreee
{*|dca49e942f5cb8b6063846c7ade4f5ea}
쿼리할 필드의 이름을 나타내는 별표 와일드카드 문자가 포함된 필드 목록입니다. , …
, 표 1 및 표 2는 단일 또는 다중일 수 있는 쿼리 데이터의 소스를 나타냅니다. 🎜WHERE ffbeece48539e6983ff3249db04f27c9
을 선택하는 경우 쿼리 데이터는 쿼리 조건을 충족해야 합니다. 🎜GROUP BY59a29f4344c753a0b98f2f1679cc2170
, 이 절은 쿼리된 데이터를 표시하고 지정된 필드에 따라 그룹화하는 방법을 MySQL에 알려줍니다. 🎜[ORDER BY0f5333100010744a1571ca8552350494]
, 이 절은 쿼리된 데이터를 표시할 순서를 MySQL에 알려줍니다. 수행할 수 있는 정렬은 오름차순(ASC)입니다. 내림차순(DESC) - 기본적으로 오름차순입니다. 🎜[LIMIT[ab76cfca1a1dc7ff1291dcdf873f72ec,]bc984d207842008469e14f06321b6461]
, 이 절은 MySQL에게 매번 쿼리된 데이터 항목의 수를 표시하도록 지시합니다. 🎜COUNT()
데이터 테이블에 포함된 레코드 행의 총 개수를 계산하거나, 해당 열에 포함된 데이터 행의 개수를 반환하는 함수입니다. 쿼리 결과🎜 COUNT(*)
여부에 관계없이 테이블의 총 행 수를 계산합니다. 열에 값 또는 null 값이 있습니다. 🎜COUNT(expression)
NULL
값을 포함하지 않는 행의 수를 셉니다. 🎜COUNT(DISTINCT 표현식)
NULL
값을 포함하지 않는 고유 행의 수를 반환합니다. 🎜BIGINT
입니다. 일치하는 행이 없으면 COUNT() 함수는 0
을 반환합니다. 🎜demo
라는 이름의 새 테이블을 생성하고 샘플 데이터를 삽입해 보겠습니다. 🎜rrreee🎜위 쿼리 문을 실행하여 다음 결과를 얻습니다. 🎜rrreee🎜 demos
테이블의 모든 행 수를 계산하려면 다음과 같이 COUNT(*)
함수를 사용하세요. 🎜rrreee🎜 WHERE
절을 추가하여 계산할 조건을 지정할 수 있습니다. 예를 들어 val
열에 2
, 다음 쿼리를 사용합니다. 🎜rrreee🎜val
열이 COUNT
함수에 지정된 경우 COUNT
함수 val
>열에는 NULL
값이 아닌 모든 행만 포함되어 있습니다. 다음 쿼리를 참조하세요. 🎜rrreee🎜 val
열에 있는 두 개의 NULL
값은 무시됩니다. 🎜🎜 demos
테이블의 고유 행 수를 계산하려면 다음과 같이 COUNT
함수에 DISTINCT
연산자를 추가하면 됩니다. 🎜rrreee🎜 실행 위의 쿼리 문을 사용하여 다음 결과를 얻습니다. 🎜rrreee🎜두 개의 중복 값 1
, 2
및 두 개의 NULL
값 무시 카운트에. 🎜GROUP BY
와 함께 <code>COUNT 함수를 자주 사용합니다. >절은 서로 다른 그룹의 데이터를 계산하는 데 함께 사용됩니다. 아래 제품
표의 구조를 참조하세요. - 🎜rrreee🎜 예를 들어, 각 제품군의 제품 수를 찾으려면 와 함께 <code>COUNT
함수를 사용할 수 있습니다. GROUP BYcode> 절, 다음 쿼리에 표시된 대로: 🎜rrreee🎜위 코드를 실행하고 다음 결과를 얻습니다.🎜rrreee🎜공급업체가 제공한 제품 수량을 찾으려면 다음 쿼리를 사용하세요.🎜rrreee 🎜위 코드를 실행하면 다음과 같은 결과가 나옵니다. -🎜 rrreee🎜최소 9
개 제품을 제공하는 공급업체를 찾으려면 COUNT에서 <code>HAVING
절을 사용하면 됩니다. 함수, 다음 쿼리 표시: 🎜rrreee🎜위 코드를 실행하고 다음 결과를 얻습니다. -🎜rrreeeIF
, IFNULL
, CASE
등과 같은 COUNT
함수 제어 흐름 함수를 사용하여 행 수를 계산할 수 있습니다. 그 값이 조건과 일치합니다. 🎜🎜예를 들어 다음 쿼리는 취소, 일시 중단 및 분쟁 중인 주문 수를 확인할 수 있습니다. 🎜rrreee🎜위 코드를 실행하면 다음과 같은 결과를 얻습니다. - 🎜rrreee🎜주문 상태가 취소, 예약 또는 분쟁인 경우 IF 함수는 1
을 반환하고, 그렇지 않으면 NULL
을 반환합니다. COUNT
함수는 NULL
값이 아닌 1
만 계산하므로 쿼리는 해당 상태에 따라 주문 수를 반환합니다. 🎜🎜【관련 추천: 🎜mysql 비디오 튜토리얼🎜】🎜위 내용은 mysql에서 수량을 쿼리하고 계산하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!