ORACLE分组统计

Jun 07, 2016 pm 03:07 PM
oracle グループ コミュニティ 統計 入力

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 ROLLUP和CUBE语句。 Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句。如果是ROLLUP(A, B, C)的话,首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入

    ROLLUP和CUBE语句。

    Oracle的GROUP

    BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句。如果是ROLLUP(A, B, C)的话,首先会对(A、B、C)进行GROUP

    BY,然后对(A、B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作。如果是GROUP BY

    CUBE(A, B, C),则首先会对(A、B、C)进行GROUP

    BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后对全表进行GROUP BY操作。

    grouping_id()可以美化效果:

    Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句。

    除本文内容外,你还可参考:

    分析函数参考手册:

    http://xsb.itpub.net/post/419/33028

    分析函数使用例子介绍:

    http://xsb.itpub.net/post/419/44634

    SQL> create table t as select * from dba_indexes;

    表已创建。

    SQL> select index_type, status, count(*) from t group by index_type, status;

    INDEX_TYPE STATUS COUNT(*)

    --------------------------- -------- ----------

    LOB VALID 51

    NORMAL N/A 25

    NORMAL VALID 479

    CLUSTER VALID 11

    下面来看看ROLLUP和CUBE语句的执行结果。

    SQL> select index_type, status, count(*) from t group by rollup(index_type, status);

    INDEX_TYPE STATUS COUNT(*)

    --------------------------- -------- ----------

    LOB VALID 51

    LOB 51

    NORMAL N/A 25

    NORMAL VALID 479

    NORMAL 504

    CLUSTER VALID 11

    CLUSTER 11

    566

    已选择8行。

    SQL> select index_type, status, count(*) from t group by cube(index_type, status);

    INDEX_TYPE STATUS COUNT(*)

    --------------------------- -------- ----------

    566

    N/A 25

    VALID 541

    LOB 51

    LOB VALID 51

    NORMAL 504

    NORMAL N/A 25

    NORMAL VALID 479

    CLUSTER 11

    CLUSTER VALID 11

    已选择10行。

    查询结果不是很一目了然,下面通过Oracle提供的函数GROUPING来整理一下查询结果。

    SQL> select grouping(index_type) g_ind, grouping(status) g_st, index_type, status, count(*)

    2 from t group by rollup(index_type, status) order by 1, 2;

    G_IND G_ST INDEX_TYPE STATUS COUNT(*)

    ---------- ---------- --------------------------- -------- ----------

    0 0 LOB VALID 51

    0 0 NORMAL N/A 25

    0 0 NORMAL VALID 479

    0 0 CLUSTER VALID 11

    0 1 LOB 51

    0 1 NORMAL 504

    0 1 CLUSTER 11

    1 1 566

    已选择8行。

    这个查询结果就直观多了,和不带ROLLUP语句的GROUP BY相比,ROLLUP增加了对INDEX_TYPE的GROUP BY统计和对所有记录的GROUP BY统计。

    也就是说,如果是ROLLUP(A, B, C)的话,首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作。

    下面看看CUBE语句。

    SQL> select grouping(index_type) g_ind, grouping(status) g_st, index_type, status, count(*)

    2 from t group by cube(index_type, status) order by 1, 2;

    G_IND G_ST INDEX_TYPE STATUS COUNT(*)

    ---------- ---------- --------------------------- -------- ----------

    0 0 LOB VALID 51

    0 0 NORMAL N/A 25

    0 0 NORMAL VALID 479

    0 0 CLUSTER VALID 11

    0 1 LOB 51

    0 1 NORMAL 504

    0 1 CLUSTER 11

    1 0 N/A 25

    1 0 VALID 541

    1 1 566

    已选择10行。

    和ROLLUP相比,CUBE又增加了对STATUS列的GROUP BY统计。

    如果是GROUP BY CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后对全表进行GROUP BY操作。

    除了使用GROUPING函数,还可以使用GROUPING_ID来标识GROUP BY结果。

    SQL> select grouping_id(index_type, status) g_ind, index_type, status, count(*)

    2 from t group by rollup(index_type, status) order by 1;

    G_IND INDEX_TYPE STATUS COUNT(*)

    ---------- --------------------------- -------- ----------

    0 LOB VALID 51

    0 NORMAL N/A 25

    0 NORMAL VALID 479

    0 CLUSTER VALID 11

    1 LOB 51

    1 NORMAL 504

    1 CLUSTER 11

    3 566

    已选择8行。

    SQL> select grouping_id(index_type, status) g_ind, index_type, status, count(*)

    2 from t group by cube(index_type, status) order by 1;

    G_IND INDEX_TYPE STATUS COUNT(*)

    ---------- --------------------------- -------- ----------

    0 LOB VALID 51

    0 NORMAL N/A 25

    0 NORMAL VALID 479

    0 CLUSTER VALID 11

    1 LOB 51

    1 NORMAL 504

    1 CLUSTER 11

    2 N/A 25

    2 VALID 541

    3 566

    已选择10行。

    grouping_id()可以美化效果:

    select DECODE(GROUPING_ID(C1), 1, '合计', C1) D1,

    DECODE(GROUPING_ID(C1, C2), 1, '小计', C2) D2,

    DECODE(GROUPING_ID(C1, C2, C1 + C2), 1, '小计', C1 + C2) D3,

    count(*),

    GROUPING_ID(C1, C2, C1 + C2, C1 + 1, C2 + 1),

    GROUPING_ID(C1)

    from T2

    group by rollup(C1, C2, C1 + C2, C1 + 1, C2 + 1);

    ===========================================================

    1.

    报表合计专用的

    Rollup

    函数

    销售报表

    以往的查询

    SQL:

    Select

    area,month,sum(money) from SaleOrder group by area,month

[1] [2] [3] 

ORACLE分组统计

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Oracle データベースのログはどのくらいの期間保存されますか? Oracle データベースのログはどのくらいの期間保存されますか? May 10, 2024 am 03:27 AM

Oracle データベース ログの保存期間は、次のようなログのタイプと構成によって異なります。 REDO ログ: 「LOG_ARCHIVE_DEST」パラメータで構成された最大サイズによって決定されます。アーカイブ REDO ログ: 「DB_RECOVERY_FILE_DEST_SIZE」パラメータで構成された最大サイズによって決まります。オンライン REDO ログ: アーカイブされず、データベースの再起動時に失われます。保持期間はインスタンスの実行時間と一致します。監査ログ: 「AUDIT_TRAIL」パラメータによって構成され、デフォルトで 30 日間保持されます。

Oracle データベースの起動手順の順序は次のとおりです。 Oracle データベースの起動手順の順序は次のとおりです。 May 10, 2024 am 01:48 AM

Oracle データベースの起動シーケンスは次のとおりです。 1. 前提条件を確認します。 3. データベース インスタンスを起動します。 5. データベースに接続します。サービスを有効にします (必要な場合)。 8. 接続をテストします。

Oracle にはどれくらいのメモリが必要ですか? Oracle にはどれくらいのメモリが必要ですか? May 10, 2024 am 04:12 AM

Oracle が必要とするメモリーの量は、データベースのサイズ、アクティビティー・レベル、および必要なパフォーマンス・レベル (データ・バッファー、索引バッファーの保管、SQL ステートメントの実行、およびデータ・ディクショナリー・キャッシュの管理) によって異なります。正確な量は、データベースのサイズ、アクティビティ レベル、および必要なパフォーマンス レベルによって影響されます。ベスト プラクティスには、適切な SGA サイズの設定、SGA コンポーネントのサイズ設定、AMM の使用、メモリ使用量の監視などが含まれます。

Oracle データベース サーバーのハードウェア構成要件 Oracle データベース サーバーのハードウェア構成要件 May 10, 2024 am 04:00 AM

Oracle データベース サーバーのハードウェア構成要件: プロセッサ: マルチコア、少なくとも 2.5 GHz のメイン周波数 大規模なデータベースの場合は、32 コア以上が推奨されます。メモリ: 小規模データベースの場合は少なくとも 8 GB、中規模のデータベースの場合は 16 ~ 64 GB、大規模なデータベースまたは重いワークロードの場合は最大 512 GB 以上。ストレージ: SSD または NVMe ディスク、冗長性とパフォーマンスのための RAID アレイ。ネットワーク: 高速ネットワーク (10GbE 以上)、専用ネットワーク カード、低遅延ネットワーク。その他: 安定した電源、冗長コンポーネント、互換性のあるオペレーティング システムとソフトウェア、放熱と冷却システム。

Oracle データベースを使用するために必要なメモリの量 Oracle データベースを使用するために必要なメモリの量 May 10, 2024 am 03:42 AM

Oracle データベースに必要なメモリの量は、データベースのサイズ、ワークロードの種類、同時ユーザーの数によって異なります。一般的な推奨事項: 小規模データベース: 16 ~ 32 GB、中規模データベース: 32 ~ 64 GB、大規模データベース: 64 GB 以上。考慮すべきその他の要素には、データベースのバージョン、メモリ最適化オプション、仮想化、ベスト プラクティス (メモリ使用量の監視、割り当ての調整) などがあります。

Oracle のスケジュールされたタスクは、作成ステップを 1 日に 1 回実行します。 Oracle のスケジュールされたタスクは、作成ステップを 1 日に 1 回実行します。 May 10, 2024 am 03:03 AM

Oracle で 1 日に 1 回実行されるスケジュールされたタスクを作成するには、次の 3 つの手順を実行する必要があります。 ジョブを作成します。ジョブにサブジョブを追加し、そのスケジュール式を「INTERVAL 1 DAY」に設定します。ジョブを有効にします。

Oracle データベースにはどれくらいのメモリが必要ですか? Oracle データベースにはどれくらいのメモリが必要ですか? May 10, 2024 am 02:09 AM

Oracle Databaseのメモリー要件は、データベースのサイズ、アクティブ・ユーザーの数、同時問合せ、有効な機能、およびシステム・ハードウェア構成の要素によって異なります。メモリ要件を決定する手順には、データベース サイズの決定、アクティブ ユーザー数の推定、同時クエリの理解、有効な機能の検討、システム ハードウェア構成の調査が含まれます。

Oracle データベースが nomount 状態で起動される場合、どのファイルを呼び出す必要がありますか? Oracle データベースが nomount 状態で起動される場合、どのファイルを呼び出す必要がありますか? May 10, 2024 am 01:51 AM

Oracle データベースを NOMOUNT 状態で起動するために呼び出されるファイルは、initsid.ora です。このファイルを編集して次のパラメータを変更します: DB_NAME (データベース名)、DB_CREATE (自動作成の防止)、DB_RECOVERY_FILE_DEST (リカバリ ログ ディレクトリ)、DB_RECOVERY_FILE_DEST_SIZE (リカバリ ログ サイズ)。その後、コマンド "STARTUP NOMOUNT" を使用してデータベースを起動します。

See all articles