Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk membuat pertanyaan dan mengira kuantiti dalam mysql

Bagaimana untuk membuat pertanyaan dan mengira kuantiti dalam mysql

青灯夜游
青灯夜游asal
2021-12-07 11:32:5841809semak imbas

Dalam mysql, anda boleh menggunakan pernyataan SELECT untuk menanyakan data, dan menggunakan fungsi COUNT() untuk mengira bilangan hasil pertanyaan Sintaks ialah "SELECT COUNT(*) FROM table name [... ];" atau "PILIH COUNT (nama medan) DARI nama jadual[...];".

Bagaimana untuk membuat pertanyaan dan mengira kuantiti dalam mysql

Persekitaran pengendalian tutorial ini: sistem windows7, versi mysql8, komputer Dell G3.

Dalam mysql, anda boleh menggunakan pernyataan SELECT untuk menanyakan data, dan menggunakan fungsi COUNT() untuk mengira bilangan hasil pertanyaan. Format tatabahasa

SELECT adalah seperti berikut:

SELECT
{* | <字段列名>}
[
FROM <表 1>, <表 2>…
[WHERE <表达式>
[GROUP BY <group by definition>
[HAVING <expression> [{<operator> <expression>}…]]
[ORDER BY <order by definition>]
[LIMIT[<offset>,] <row count>]
]

Antaranya, maksud setiap klausa adalah seperti berikut:

  • {*|91f4a644069eb08f05815c14fcb8b2df}Senarai medan yang mengandungi aksara kad bebas asterisk, yang menunjukkan nama medan yang hendak disoal.

  • 1db5ee5e96c8774919312b86ea1e4ece,e612022ea012f486e2b8f4eb394bb6e0…, Jadual 1 dan Jadual 2 mewakili sumber data pertanyaan, yang boleh tunggal atau berbilang.

  • WHERE a8db8f1ba937e93d98acf65ecbbdce13 adalah pilihan Jika dipilih, data pertanyaan mesti memenuhi syarat pertanyaan.

  • GROUP BY628258a999ccbeb31a9b66d6d3301cc9, klausa ini memberitahu MySQL cara memaparkan data yang ditanya dan mengumpulkannya mengikut medan yang ditentukan.

  • [ORDER BY628258a999ccbeb31a9b66d6d3301cc9], klausa ini memberitahu MySQL dalam susunan apa untuk memaparkan data yang ditanyakan ialah tertib menaik (ASC) dan tertib menurun (DESC) Secara lalai Ia dalam menaik pesanan.

  • [LIMIT[ab76cfca1a1dc7ff1291dcdf873f72ec,]bc984d207842008469e14f06321b6461], klausa ini memberitahu MySQL untuk memaparkan bilangan item data yang ditanya setiap kali.

COUNT() Fungsi mengira jumlah bilangan baris rekod yang terkandung dalam jadual data, atau mengembalikan bilangan baris data yang terkandung dalam lajur berdasarkan hasil pertanyaan

  • COUNT(*) Kira jumlah bilangan baris dalam jadual, tidak kira sama ada lajur mempunyai nilai atau nilai nol.

  • COUNT(表达式) Mengira bilangan baris yang tidak mengandungi nilai NULL.

  • COUNT(DISTINCT 表达式) Mengembalikan bilangan baris unik yang tidak mengandungi nilai NULL

Jenis pulangan COUNT() fungsi ialah BIGINT. Jika tiada baris yang sepadan ditemui, fungsi COUNT() mengembalikan 0.

Contoh KIRAAN MySQL

Mari kita buat jadual baharu bernama demo dan masukkan beberapa sampel data.

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;

Laksanakan pernyataan pertanyaan di atas dan dapatkan keputusan berikut-

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

Untuk mengira semua baris dalam jadual demos, gunakan fungsi COUNT(*) seperti berikut:

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

Anda boleh menambah klausa WHERE untuk menentukan syarat untuk dikira, sebagai contoh, untuk mengira baris sahaja di mana lajur val mengandungi nilai yang sama dengan 2, gunakan pertanyaan berikut:

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

Jika lajur COUNT ditentukan dalam fungsi val, fungsi COUNT mengira semua baris yang lajurnya val mengandungi hanya nilai bukanNULL. Lihat pertanyaan berikut: Dua nilai

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

valNULL akan diabaikan.

Untuk mengira baris unik dalam jadual demos, anda boleh menambah operator DISTINCT pada fungsi COUNT, seperti berikut:

SELECT COUNT(DISTINCT val) FROM demos;

Laksanakan pernyataan pertanyaan di atas , Dapatkan hasil berikut -

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

mengabaikan dua nilai pendua 1, 2 dan dua nilai NULL dalam kiraan.

MYSQL COUNT dengan GROUP BY

Kami sering menggunakan fungsi COUNT dalam kombinasi dengan klausa GROUP BY untuk mengira data dalam kumpulan yang berbeza. Lihat struktur jadual products di bawah -

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

Contohnya, untuk mencari bilangan produk dalam setiap siri produk, anda boleh menggunakan fungsi COUNT dengan klausa GROUP BY, sebagai ditunjukkan dalam pertanyaan berikut:

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

Laksanakan kod di atas dan dapatkan keputusan berikut -

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

Untuk mencari kuantiti produk yang disediakan oleh pembekal, sila gunakan pertanyaan berikut:

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

Laksanakan kod di atas, dapatkan keputusan berikut -

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

Untuk mencari pembekal mana yang menyediakan sekurang-kurangnya 9 produk, anda boleh menggunakan klausa HAVING dalam Fungsi COUNT, seperti yang ditunjukkan dalam pernyataan pertanyaan berikut :

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

Laksanakan kod di atas dan dapatkan hasil berikut -

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

MYSQL COUNT IF

Anda boleh menggunakan fungsi aliran kawalan dalam fungsi COUNT, sepertiIF, IFNULL, CASE, dsb. untuk mengira baris yang nilainya sepadan dengan keadaan.

Sebagai contoh, pertanyaan berikut boleh mencari bilangan pesanan yang dibatalkan, digantung dan dipertikaikan:

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

Laksanakan kod di atas dan dapatkan keputusan berikut -

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

Fungsi IF akan kembali 1 jika status pesanan dibatalkan, Dipelihara atau Dipertikaikan, jika tidak NULL akan dikembalikan. Fungsi COUNT hanya mengira nilai 1, bukan NULL, jadi pertanyaan mengembalikan bilangan pesanan berdasarkan status yang sepadan.

[Cadangan berkaitan: tutorial video mysql]

Atas ialah kandungan terperinci Bagaimana untuk membuat pertanyaan dan mengira kuantiti dalam mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn