ホームページ  >  記事  >  データベース  >  Oracle の例では、グループ化されたデータを詳しく説明しています

Oracle の例では、グループ化されたデータを詳しく説明しています

WBOY
WBOY転載
2022-07-19 14:07:392615ブラウズ

この記事では、主にグループ化されたデータに関連する問題を整理した Oracle に関する関連知識を提供します。グループ化により、データを論理的なグループに分割し、各グループを実行できるようになります。集計計算を見てみましょう. 皆様のお役に立てれば幸いです。

Oracle の例では、グループ化されたデータを詳しく説明しています

推奨チュートリアル: 「Oracle ビデオ チュートリアル

グループ化により、データを論理グループに分割し、各グループが集計を実行できるようになります。計算。

1. グループの作成

グループは、SELECT ステートメントの GROUP BY 句を使用して作成されます。

例:

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

Oracle の例では、グループ化されたデータを詳しく説明しています

GROUP BY を使用するため、評価する各グループを指定する必要はありません。計算され、自動的に完了します。 GROUP BY 句は、データをグループ化し、(結果セット全体ではなく) 各グループに対して集計を実行するように Oracle に指示します。

GROUP BY を使用する前に、GROUP BY の使用について知っておく必要がある重要なルールをいくつか説明します。

  • GROUP BY 句には、必要な数の列を含めることができます。これにより、ネストされたグループ化が可能になり、データのグループ化方法をより詳細に制御できるようになります。
  • group by 句にネストされたグループがある場合、データは最後に指定されたグループに集計されます。つまり、グループを構築するとき、指定されたすべての列が一緒に評価されます (そのため、個々の列ごとにデータは取得されません)。
  • group by にリストされる各列は、取得された列または有効な式 (集計関数ではない) である必要があります。 select で式を使用する場合、同じ式を group by で指定する必要があります。エイリアスは使用できません。
  • 集計計算ステートメントを除き、SELECT ステートメントの各列は GROUP BY 句に指定する必要があります。
  • グループ化列に NULL 値を持つ列が含まれている場合、グループ化として NULL が返されます。 NULL 値を持つ行が複数ある場合、それらはすべてグループ化されます。
  • GROUP BY 句は、WHERE 句の後、ORDER BY 句の前に指定する必要があります。

2. フィルターのグループ化

where 句は通常、行のフィルター処理にも使用されます。ただし、where は特定の行をグループ化するのではなくフィルターできるため、ここでは適用されません。実際、where はグループ化に適用できません。

Oracle では、このために別の句 HAVING を提供しています。 where 句と Hasting 句の唯一の違いは、where では行がフィルタされるのに対し、have ではグループがフィルタされることです。

**ヒント: **having はすべての where 演算子をサポートします

where と Have のルールは同じ構文を持ち、キーの下位部分のみが異なります。

#例:

SELECT cust_id, COUNT(*) AS ordersFROM ordersGROUP BY cust_idHAVING COUNT(*) >= 2;

Oracle の例では、グループ化されたデータを詳しく説明しています

#注: have と where の違い

#have と where の違いを別の角度から見てみましょう。フィルタリングはデータの前に行われますが、have フィルタリングはデータのグループ化の後に行われます。これは重要な違いであり、where 句によって削除された行はグループ化に含まれません。これにより、having 句で使用される値に基づいて計算値が変更される可能性があり、その結果、どのグループがフィルタリングされるかに影響を与える可能性があります。

#where 句と have 句を同時に使用する例:

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;

Oracle の例では、グループ化されたデータを詳しく説明しています

3. グループ化と並べ替え

Oracle の例では、グループ化されたデータを詳しく説明しています

group by と order by は、通常は同じことを達成するために使用されますが、両者には大きな違いがあります。

#次の表では、order by と group by の違いについて説明します

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;

Oracle の例では、グループ化されたデータを詳しく説明しています

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

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

Oracle の例では、グループ化されたデータを詳しく説明しています

4、select子句排序

select子句和它们的顺序

#任意の列を使用できます (選択されていない列も含む)
子句 描述 是否必须
select 要返回的列或表达式 Y
from 要从中检索数据的表 Y(在Oracle中是必须的;在大多数其他的DBMS中则不是)
where 行级过滤(分组前过滤) N
group by 分组规范 仅当按分组计算聚合值时是必须的
having 分组级过滤(分组后过滤) N
order by 输出的排列顺序 N

推荐教程:《Oracle视频教程

以上がOracle の例では、グループ化されたデータを詳しく説明していますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。