Rumah  >  Artikel  >  pangkalan data  >  Contoh Oracle menerangkan data terkumpul secara terperinci

Contoh Oracle menerangkan data terkumpul secara terperinci

WBOY
WBOYke hadapan
2022-07-19 14:07:392615semak imbas

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.

Contoh Oracle menerangkan data terkumpul secara terperinci

Tutorial yang disyorkan: "Tutorial Video Oracle"

Pengelompokan membolehkan data dibahagikan kepada kumpulan logik supaya setiap Kumpulan melakukan agregat pengiraan.

1 Buat kumpulan

Kumpulan dibuat menggunakan klausa GROUP BY dalam pernyataan SELECT.

Contoh:

SELECT vend_id, count(*) as num_prodsfrom productsgroup by vend_id;

Contoh Oracle menerangkan data terkumpul secara terperinci

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 GROUP BY boleh mengandungi seberapa banyak lajur yang diperlukan. Ia membenarkan pengumpulan bersarang, memberikan kawalan yang lebih terperinci tentang cara data dikumpulkan.
  • Jika anda mempunyai kumpulan bersarang dalam kumpulan mengikut klausa, data akan diringkaskan pada kumpulan terakhir yang ditentukan. Dalam erti kata lain, apabila membina kumpulan, semua lajur yang ditentukan akan dinilai bersama (jadi data tidak akan diambil untuk setiap lajur individu).
  • Setiap lajur yang disenaraikan dalam kumpulan oleh mestilah lajur yang diambil semula atau ungkapan yang sah (bukan fungsi agregat). Jika ungkapan digunakan dalam pilih, ungkapan yang sama mesti dinyatakan dalam kumpulan mengikut. Alias ​​tidak boleh digunakan.
  • Kecuali penyata pengiraan agregat, setiap lajur dalam penyata SELECT sepatutnya muncul dalam klausa GROUP BY.
  • Jika lajur pengumpulan mengandungi lajur dengan nilai NULL, NULL akan dikembalikan sebagai kumpulan. Jika terdapat berbilang baris dengan nilai NULL, kesemuanya akan dikumpulkan bersama.
  • Klausa GROUP BY mesti muncul selepas klausa WHERE dan sebelum klausa ORDER BY.

2. Pengumpulan penapis

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;

Contoh Oracle menerangkan data terkumpul secara terperinci

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;

Contoh Oracle menerangkan data terkumpul secara terperinci

SELECT vend_id, COUNT(*) AS num_prodsFROM productsGROUP BY vend_idHAVING COUNT(*) >= 2;

Contoh Oracle menerangkan data terkumpul secara terperinci

3. Mengelompokkan dan menyusun

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;

Contoh Oracle menerangkan data terkumpul secara terperinci

要按订单总价对输出进行排序,只需添加一个ORDER BY子句,如下:

SELECT order_num, SUM(quantity*item_price) AS ordertotalFROM orderitemsGROUP BY order_numHAVING SUM(quantity*item_price) >= 50ORDER BY ordertotal;

Contoh Oracle menerangkan data terkumpul secara terperinci

4、select子句排序

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!

Kenyataan:
Artikel ini dikembalikan pada:csdn.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam