In MySQL können Sie die SELECT-Anweisung verwenden, um Daten abzufragen, und die Funktion COUNT() verwenden, um die Anzahl der Abfrageergebnisse zu zählen. Die Syntax lautet „SELECT COUNT(*) FROM table name [...];“ „SELECT COUNT (Feldname) FROM Tabellenname[...];“.
Die Betriebsumgebung dieses Tutorials: Windows7-System, MySQL8-Version, Dell G3-Computer.
In MySQL können Sie die SELECT-Anweisung zum Abfragen von Daten verwenden und die Funktion COUNT() verwenden, um die Anzahl der Abfrageergebnisse zu zählen.
SELECT
Das Syntaxformat ist wie folgt:SELECT
的语法格式如下:
SELECT {* | <字段列名>} [ FROM <表 1>, <表 2>… [WHERE <表达式> [GROUP BY <group by definition> [HAVING <expression> [{<operator> <expression>}…]] [ORDER BY <order by definition>] [LIMIT[<offset>,] <row count>] ]
其中,各条子句的含义如下:
{*|<字段列名>}
包含星号通配符的字段列表,表示所要查询字段的名称。
<表 1>,<表 2>…
,表 1 和表 2 表示查询数据的来源,可以是单个或多个。
WHERE <表达式>
是可选项,如果选择该项,将限定查询数据必须满足该查询条件。
GROUP BY< 字段 >
,该子句告诉 MySQL 如何显示查询出来的数据,并按照指定的字段分组。
[ORDER BY< 字段 >]
,该子句告诉 MySQL 按什么样的顺序显示查询出来的数据,可以进行的排序有升序(ASC)和降序(DESC),默认情况下是升序。
[LIMIT[<offset>,]<row count>]
,该子句告诉 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
{*|<Feldspaltenname>}
Eine Feldliste mit dem Sternchen-Platzhalterzeichen, das den Namen des abzufragenden Felds angibt. <Tabelle 1>, <Tabelle 2>…
, Tabelle 1 und Tabelle 2 stellen die Quelle der Abfragedaten dar, die einzeln oder mehrfach sein können. 🎜WHERE <Expression>
ist optional. Wenn ausgewählt, müssen die Abfragedaten die Abfragebedingungen erfüllen. 🎜GROUP BY< field >
, diese Klausel teilt MySQL mit, wie die abgefragten Daten angezeigt und entsprechend dem angegebenen Feld gruppiert werden sollen. 🎜[ORDER BY< field>]
, diese Klausel teilt MySQL mit, in welcher Reihenfolge die abgefragten Daten angezeigt werden sollen, die Sortierung ist aufsteigend (ASC) und Absteigend (DESC), standardmäßig aufsteigend. 🎜[LIMIT[<offset>,]<row count>]
, diese Klausel weist MySQL an, jedes Mal die Anzahl der abgefragten Datenelemente anzuzeigen. 🎜COUNT()
Die Funktion zählt die Gesamtzahl der in der Datentabelle enthaltenen Datensatzzeilen oder gibt die Anzahl der in der Spalte enthaltenen Datenzeilen basierend auf zurück Abfrageergebnisse🎜 COUNT(*)
Berechnen Sie die Gesamtzahl der Zeilen in der Tabelle, unabhängig davon, ob Eine Spalte hat einen Wert oder einen Nullwert. 🎜COUNT(expression)
Zählt die Anzahl der Zeilen, die keine NULL
-Werte enthalten. 🎜COUNT(DISTINCT expression)
Gibt die Anzahl der eindeutigen Zeilen zurück, die keine NULL
-Werte enthalten 🎜BIGINT
. Wenn keine passende Zeile gefunden wird, gibt die Funktion COUNT() 0
zurück. 🎜demo
erstellen und einige Beispieldaten einfügen. 🎜rrreee🎜Führen Sie die obige Abfrageanweisung aus und erhalten Sie die folgenden Ergebnisse: 🎜rrreee🎜Um alle Zeilen in der Tabelle demos
zu zählen, verwenden Sie bitte die Funktion COUNT(*)
unten gezeigt: 🎜rrreee🎜Sie können eine WHERE
-Klausel hinzufügen, um eine zu zählende Bedingung anzugeben. Beispielsweise werden nur Zeilen gezählt, bei denen die Spalte val
einen Wert enthält, der 2
verwenden Sie die folgende Abfrage: 🎜rrreee🎜Wenn eine Spalte val
in der Funktion COUNT
angegeben ist, wird die Funktion COUNT
verwendet zählt seinen val
>Spalte enthält nur alle Zeilen mit Nicht-NULL
-Werten. Siehe folgende Abfrage: 🎜rrreee🎜 Zwei NULL
-Werte in der Spalte val
werden ignoriert. 🎜🎜Um eindeutige Zeilen in der Tabelle demos
zu zählen, können Sie den Operator DISTINCT
wie folgt zur Funktion COUNT
hinzufügen: 🎜rrreee🎜 Ausführen Führen Sie die obige Abfrageanweisung aus und erhalten Sie die folgenden Ergebnisse: 🎜rrreee🎜Ignorieren Sie die beiden doppelten Werte 1
, 2
und die beiden NULL
-Werte in der Zählung. 🎜COUNT
mit GROUP BY
-Klauseln werden zusammen verwendet, um Daten in verschiedenen Gruppen zu zählen. Sehen Sie sich die Struktur der products
-Tabelle unten an – 🎜rrreee🎜 Um beispielsweise die Anzahl der Produkte in jeder Produktreihe zu ermitteln, können Sie die Funktion COUNT
mit verwenden GROUP BY
code>-Klausel, wie in der folgenden Abfrage gezeigt: 🎜rrreee🎜Führen Sie den obigen Code aus und erhalten Sie die folgenden Ergebnisse: 🎜rrreee🎜Um die vom Lieferanten bereitgestellte Produktmenge zu ermitteln, verwenden Sie bitte die folgende Abfrage:🎜rrreee 🎜Führen Sie den obigen Code aus und erhalten Sie die folgenden Ergebnisse – 🎜 rrreee🎜Um herauszufinden, welcher Lieferant mindestens 9
Produkte anbietet, können Sie die HAVING
-Klausel im COUNT verwenden
-Funktion, wie in der folgenden Abfrageanzeige: 🎜rrreee🎜Führen Sie den obigen Code aus und erhalten Sie die folgenden Ergebnisse -🎜rrreeeCOUNT
verwenden. Kontrollflussfunktionen wie IF
, IFNULL
, CASE
usw., um Zeilen zu zählen deren Werte mit der Bedingung übereinstimmen. 🎜🎜Zum Beispiel kann die folgende Abfrage ermitteln, wie viele stornierte, ausgesetzte und umstrittene Bestellungen es gibt: 🎜rrreee🎜Wenn Sie den obigen Code ausführen, erhalten Sie die folgenden Ergebnisse – 🎜rrreee🎜Wenn der Status der Bestellung storniert, reserviert oder umstritten ist, Die IF-Funktion gibt 1
zurück, andernfalls wird NULL
zurückgegeben. Die Funktion COUNT
zählt nur 1
, keine NULL
-Werte, daher gibt die Abfrage die Anzahl der Bestellungen basierend auf dem entsprechenden Status zurück. 🎜🎜【Verwandte Empfehlungen: 🎜MySQL-Video-Tutorial🎜】🎜Das obige ist der detaillierte Inhalt vonSo fragen Sie die Menge in MySQL ab und zählen sie. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!