Artikel ini membawakan anda pengetahuan yang berkaitan tentang Oracle, yang terutamanya mengatur isu yang berkaitan dengan data berkumpulan membolehkan data dibahagikan kepada kumpulan logik supaya setiap kumpulan boleh dilaksanakan Mari kita lihat pengiraan agregat. Saya harap ia akan membantu semua orang.
Tutorial yang disyorkan: "Tutorial Video Oracle"
Pengelompokan membolehkan data dibahagikan kepada kumpulan logik supaya setiap Kumpulan melakukan agregat pengiraan.
Kumpulan dibuat menggunakan klausa GROUP BY dalam pernyataan SELECT.
Contoh:
SELECT vend_id, count(*) as num_prodsfrom productsgroup by vend_id;
Memandangkan GROUP BY digunakan, ia tidak perlu menyatakan setiap kumpulan untuk dinilai dan dikira, Ini dilakukan secara automatik. Klausa GROUP BY mengarahkan Oracle untuk mengumpulkan data dan melakukan pengagregatan pada setiap kumpulan (bukan pada keseluruhan set hasil).
Sebelum menggunakan GROUP BY, disenaraikan di bawah adalah beberapa peraturan penting yang perlu anda ketahui tentang menggunakannya.
Klausa tempat juga biasanya digunakan untuk penapisan baris. Walau bagaimanapun, di mana tidak digunakan di sini kerana di mana boleh menapis baris tertentu, bukan mengumpulkannya. Malah, mana tidak boleh digunakan untuk kumpulan.
Oracle menyediakan klausa lain untuk ini: HAVING. Satu-satunya perbezaan antara klausa where dan klausa mempunyai ialah tempat menapis baris, sambil mempunyai kumpulan penapis.
**Petua: **mempunyai menyokong semua operator di mana
Peraturan di mana dan mempunyai sintaks yang sama, hanya kata kunci yang berbeza.
Contoh:
SELECT cust_id, COUNT(*) AS ordersFROM ordersGROUP BY cust_idHAVING COUNT(*) >= 2;
Nota: Perbezaan antara memiliki dan di mana
Lihat perbezaan antara mempunyai dan di mana dari sudut lain: tempat penapisan berlaku sebelum data, manakala penapisan berlaku selepas pengumpulan data. Ini ialah perbezaan penting, baris dipadamkan oleh klausa di mana tidak disertakan dalam kumpulan. Ini mungkin mengubah nilai yang dikira berdasarkan nilai yang digunakan dalam klausa yang mempunyai, yang seterusnya boleh menjejaskan kumpulan mana yang akan ditapis.
Contoh penggunaan klausa where dan mempunyai klausa pada masa yang sama:
select vend_id, count(*), as num_prodsfrom productswhere prod_price>=10group by vend_idhaving count(*) > 2;
SELECT vend_id, COUNT(*) AS num_prodsFROM productsGROUP BY vend_idHAVING COUNT(*) >= 2;
Terdapat perbezaan besar antara kumpulan mengikut dan mengikut, walaupun ia biasanya digunakan untuk mencapai perkara yang sama.
Jadual berikut menerangkan perbezaan antara susunan mengikut dan kumpulan mengikut
order by | group by |
---|---|
对生成的输出进行排序 | 对行进行分组,不过输出可能没有采用采用分组顺序 |
可能使用任意列(甚至包括没有选择的列) | 只可能使用所选的列或者表达式,并且一定会使用所有选择的列表达式 |
从来都不是必须的 | 如果结合使用列(或者表达式)与聚合函数,则必需的 |
时常,你会发现使用GROUP BY分组的数据的确是以分组顺序输出的。但是并非总是如此,并且实际上SQL规范也并没有如此要求。而且你实际上可能希望它以不同于分组的方式进行排序。你以一种方式对数据进行分组(以获得特定于分组的聚合值),并不意味着你也希望输出以相同的方式进行排序。总是应该还提供一个显式的ORDER BY子句,即使它与GROUP BY子句完全相同。
提示:不要忘记ORDER BY
通常,无论何时使用GROUP BY子句,还应该指定一个ORDER BY子句,这是确保正确地对数据进行排序的唯一方式。永远不要依靠GROUP BY对数据排序。
为了演示同时使用GROUP BY和ORDER BY的情况,让我们看一个示例。下面的SELECT语句类似于之前使用的SELECT语句。它用于检索总价在50以上(含50)的所有订单的订单号和订单总价:
SELECT order_num, SUM(quantity*item_price) AS ordertotalFROM orderitemsGROUP BY order_numHAVING SUM(quantity*item_price) >= 50;
要按订单总价对输出进行排序,只需添加一个ORDER BY子句,如下:
SELECT order_num, SUM(quantity*item_price) AS ordertotalFROM orderitemsGROUP BY order_numHAVING SUM(quantity*item_price) >= 50ORDER BY ordertotal;
select子句和它们的顺序
子句 | 描述 | 是否必须 |
---|---|---|
select | 要返回的列或表达式 | Y |
from | 要从中检索数据的表 | Y(在Oracle中是必须的;在大多数其他的DBMS中则不是) |
where | 行级过滤(分组前过滤) | N |
group by | 分组规范 | 仅当按分组计算聚合值时是必须的 |
having | 分组级过滤(分组后过滤) | N |
order by | 输出的排列顺序 | N |
推荐教程:《Oracle视频教程》
Atas ialah kandungan terperinci Contoh Oracle menerangkan data terkumpul secara terperinci. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!