この記事では、主にグループ化されたデータに関連する問題を整理した Oracle に関する関連知識を提供します。グループ化により、データを論理的なグループに分割し、各グループを実行できるようになります。集計計算を見てみましょう. 皆様のお役に立てれば幸いです。
推奨チュートリアル: 「Oracle ビデオ チュートリアル 」
グループ化により、データを論理グループに分割し、各グループが集計を実行できるようになります。計算。
グループは、SELECT ステートメントの GROUP BY 句を使用して作成されます。
例:
SELECT vend_id, count(*) as num_prodsfrom productsgroup by vend_id;
GROUP BY を使用するため、評価する各グループを指定する必要はありません。計算され、自動的に完了します。 GROUP BY 句は、データをグループ化し、(結果セット全体ではなく) 各グループに対して集計を実行するように Oracle に指示します。
GROUP BY を使用する前に、GROUP BY の使用について知っておく必要がある重要なルールをいくつか説明します。
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;
#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;
#次の表では、order by と group by の違いについて説明します
order by
#生成された出力を並べ替える | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
#任意の列を使用できます (選択されていない列も含む) | #選択された列または式のみが使用でき、選択されたすべての列の式が使用されます||||||||||||||||||||
集計関数で列 (または式) を使用する場合は必須 | ||||||||||||||||||||
子句 | 描述 | 是否必须 |
---|---|---|
select | 要返回的列或表达式 | Y |
from | 要从中检索数据的表 | Y(在Oracle中是必须的;在大多数其他的DBMS中则不是) |
where | 行级过滤(分组前过滤) | N |
group by | 分组规范 | 仅当按分组计算聚合值时是必须的 |
having | 分组级过滤(分组后过滤) | N |
order by | 输出的排列顺序 | N |
推荐教程:《Oracle视频教程》
以上がOracle の例では、グループ化されたデータを詳しく説明していますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。