kumpulan dengan bermaksud "kueri kumpulan", yang boleh difahami sebagai "kumpulan (Kumpulan) mengikut (oleh) peraturan tertentu"; dan kemudian melakukan pemprosesan data pada beberapa kawasan kecil. Dalam MySQL, GROUP BY ialah klausa pilihan bagi pernyataan SELECT yang digunakan untuk mengumpulkan hasil pertanyaan berdasarkan satu atau lebih medan Ia mengurangkan bilangan baris dalam set hasil.
Persekitaran pengendalian tutorial ini: sistem windows7, versi mysql8, komputer Dell G3.
kumpulan dengan bermaksud "pertanyaan kumpulan".
Pernyataan Kumpulan Mengikut secara literal bermaksud "Kumpulan mengikut (mengikut) peraturan tertentu" dalam bahasa Inggeris. Fungsinya adalah untuk membahagikan set data kepada beberapa kawasan kecil melalui peraturan tertentu, dan kemudian melakukan pemprosesan data pada beberapa kawasan kecil.
Dalam MySQL, kata kunci GROUP BY boleh mengumpulkan hasil pertanyaan mengikut satu atau lebih medan.
Klausa GROUP BY mengumpulkan set baris ke dalam kumpulan kecil rekod baris ringkasan mengikut nilai lajur atau ungkapan. Klausa GROUP BY mengembalikan satu baris untuk setiap kumpulan. Dalam erti kata lain, ia mengurangkan bilangan baris dalam set hasil.
Klausa GROUP BY sering digunakan dengan fungsi agregat seperti SUM, AVG, MAX, MIN dan COUNT. Fungsi agregat digunakan dalam klausa SELECT untuk mengira maklumat tentang setiap kumpulan.
Klausa GROUP BY ialah klausa pilihan bagi pernyataan SELECT. Berikut ialah sintaks klausa GROUP BY:
SELECT c1, c2,..., cn, aggregate_function(ci) FROM table WHERE where_conditions GROUP BY c1 , c2,...,cn;
Klausa GROUP BY mesti muncul selepas klausa FROM dan WHERE. Mengikuti kata kunci GROUP BY ialah senarai lajur atau ungkapan yang dipisahkan koma yang akan digunakan sebagai syarat untuk mengumpulkan baris.
1. Simple MySQL GROUP BY contoh
Mari kita lihat contoh pangkalan data ( yiibaidb ), strukturnya adalah seperti berikut -
mysql> desc orders;
Dengan mengandaikan bahawa anda ingin mengumpulkan nilai status pesanan ke dalam subkumpulan, anda perlu menggunakan GROUP OLEH klausa Dan tentukan untuk melaksanakan pengumpulan mengikut lajur status, pertanyaan berikut:
SELECT status FROM orders GROUP BY status;
Laksanakan pernyataan pertanyaan di atas dan dapatkan keputusan berikut -
Seperti yang anda lihat, GROUP Nilai status yang dikembalikan oleh klausa BY adalah unik. Ia berfungsi seperti operator DISTINCT, seperti yang ditunjukkan dalam pertanyaan berikut:
SELECT DISTINCT status FROM orders;
Melaksanakan pernyataan pertanyaan di atas, kami mendapat hasil berikut -
2. MySQL GROUP BY dan fungsi agregat
Anda boleh menggunakan fungsi agregat untuk melakukan pengiraan pada sekumpulan baris dan mengembalikan satu nilai. Klausa GROUP BY sering digunakan dengan fungsi agregat untuk melakukan pengiraan bagi setiap kumpulan dan mengembalikan satu nilai.
Sebagai contoh, jika anda ingin mengetahui bilangan pesanan dalam setiap status, anda boleh menggunakan fungsi COUNT dan pernyataan pertanyaan klausa GROUP BY, seperti yang ditunjukkan di bawah:
SELECT status, COUNT(*) AS total_number FROM orders GROUP BY status;
Laksanakan pernyataan pertanyaan di atas dan dapatkan keputusan berikut-
Sila rujuk jadual pesanan dan butiran pesanan berikut, rajah ER mereka adalah seperti berikut-
Untuk mendapatkan jumlah keseluruhan semua pesanan mengikut status, anda boleh menggunakan jadual butiran pesanan untuk menyambungkan jadual pesanan, dan gunakan fungsi SUM untuk mengira jumlah keseluruhan. Sila rujuk pertanyaan berikut:
SELECT status, SUM(quantityOrdered * priceEach) AS amount FROM orders INNER JOIN orderdetails USING (orderNumber) GROUP BY status;
Melaksanakan pertanyaan di atas memberikan hasil berikut -
Begitu juga, pertanyaan berikut mengembalikan nombor pesanan dan bilangan setiap pesanan sekaligus.
SELECT orderNumber, SUM(quantityOrdered * priceEach) AS total FROM orderdetails GROUP BY orderNumber;
Lakukan pertanyaan di atas dan dapatkan hasil berikut -
3. MySQL GROUP BY contoh ekspresi
Selain lajur, baris boleh dikumpulkan mengikut ungkapan. Pertanyaan berikut mendapat jumlah jualan setahun.
SELECT YEAR(orderDate) AS year, SUM(quantityOrdered * priceEach) AS total FROM orders INNER JOIN orderdetails USING (orderNumber) WHERE status = 'Shipped' GROUP BY YEAR(orderDate);
Lakukan pertanyaan di atas dan dapatkan hasil berikut-
Dalam contoh ini, kami menggunakan fungsi YEAR untuk mengekstrak tahun daripada pesanan data tarikh (orderDate). Hanya pesanan dengan status Dihantar disertakan. Ambil perhatian bahawa ungkapan yang muncul dalam klausa SELECT mestilah sama seperti dalam klausa GROUP BY.
Anda boleh menggunakan HAVING clause untuk menapis kumpulan yang dikembalikan oleh GROUP BY clause. Pertanyaan berikut menggunakan klausa HAVING untuk memilih jumlah jualan tahunan dari 2013 dan seterusnya.
SELECT YEAR(orderDate) AS year, SUM(quantityOrdered * priceEach) AS total FROM orders INNER JOIN orderdetails USING (orderNumber) WHERE status = 'Shipped' GROUP BY year HAVING year > 2013;
Lakukan pertanyaan di atas dan dapatkan hasil berikut -
标准SQL不允许使用GROUP BY子句中的别名,但MySQL支持此选项。以下查询从订单日期提取年份,并对每年的订单进行计数。该year用作表达式YEAR(orderDate)的别名,它也用作GROUP BY子句中的别名,此查询在标准SQL中无效。
参考以下查询 -
SELECT YEAR(orderDate) AS year, COUNT(orderNumber) FROM orders GROUP BY year;
执行上面查询,得到以下结果 -
MySQL还允许您以升序或降序(标准SQL不能提供)对组进行排序。默认顺序是升序。例如,如果要按状态获取订单数量并按降序对状态进行排序,则可以使用带有DESC的GROUP BY子句,如下查询语句:
SELECT status, COUNT(*) FROM orders GROUP BY status DESC;
执行上面查询,得到以下结果 -
请注意,在GROUP BY子句中使用DESC以降序对状态进行排序。我们还可以在GROUP BY子句中明确指定ASC,按状态对分组进行升序排序。
【相关推荐:mysql视频教程】
Atas ialah kandungan terperinci Apakah yang dimaksudkan dengan kumpulan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!