Oracle では、クエリ結果をグループ化するには、「group by」キーワードを SELECT ステートメントと一緒に使用する必要があります。行は、行または式の値によってグループ化された概要行に結合できます。構文「SELECT フィールド リスト FROM データ」テーブル名 GROUP BY フィールド名;"。
このチュートリアルの動作環境: Windows 7 システム、Oracle 11g バージョン、Dell G3 コンピューター。
GROUP BY キーワードを使用すると、1 つ以上のフィールドに基づいてクエリ結果をグループ化できます。
GROUP BY 句は、行または式の値によって行をグループ化された集計行に結合するために SELECT ステートメントで使用されます。 GROUP BY 句は、グループごとに 1 行を返します。
GROUP BY 句は通常、AVG()、COUNT()、MAX()、MIN()、SUM() などの集計関数とともに使用されます。この場合、集計関数は各グループの概要情報を返します。たとえば、製品にいくつかのカテゴリがある場合、AVG() 関数は各カテゴリの製品の平均価格を返します。
次に、Oracle の GROUP BY 句の構文を示します。
SELECT 字段列表 FROM 数据表名 GROUP BY 字段名;
GROUP BY 句は、FROM 句の後に表示されます。 WHERE 句を指定する場合は、GROUP BY 句を WHERE 句の前に配置する必要があります。
GROUP BY 句は、グループ化列の値 (c1、c2、c3 など) によって行をグループ化します。 GROUP BY 句には、集計列またはグループ化列のみを含めることができます。
一度に計算する複数のグループ化レベルを指定する場合は、次の ROLLUP 構文を使用します。
SELECT 字段列表 FROM 数据表名 GROUP BY ROLLUP(c1,c2,c3);
サンプル データベース内の次の orders
テーブルと order_items
テーブルを使用してデモを行います:
# #1. Oracle GROUP BY
の基本的な例 次のステートメントは、GROUP BY 句を使用して、
orders テーブル内で一意の注文ステータスを検索します。 :
SELECT status FROM orders GROUP BY status;
DISTINCT を使用した次のステートメントと同じ効果があります。 演算子:
SELECT DISTINCT status FROM orders;
2. Oracle GROUP BY 集計の例
次のステートメントは顧客の注文数量を返します:SELECT customer_id, COUNT( order_id ) FROM orders GROUP BY customer_id ORDER BY customer_id;
COUNT() を使用します。注文数量を返す 関数。
orders テーブルと
customers テーブルを結合します。
SELECT name, COUNT( order_id ) FROM orders INNER JOIN customers USING(customer_id) GROUP BY name ORDER BY name;
#3. Oracle GROUP BY 式の例
次の例は次のとおりです。 year 注文をグループ化し、年間の注文数を返します。次のクエリ ステートメントを参照してください。SELECT EXTRACT(YEAR FROM order_date) YEAR, COUNT( order_id ) FROM orders GROUP BY EXTRACT(YEAR FROM order_date) ORDER BY YEAR;
EXTRACT を使用します。 ()関数は注文日から年の情報を取得します。
GROUP BY 句で年を返す式を使用します。
4. ROLLUP を使用した Oracle GROUP BY の例
次のステートメントは、customer_id 推奨チュートリアル: 「 以上がOracleグループの使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。,## によって売上高を計算します。 #status
と (customer_id
, status
) でグループ化します。 SELECT
customer_id,
status,
SUM( quantity * unit_price ) sales
FROM
orders
INNER JOIN order_items
USING(order_id)
GROUP BY
ROLLUP(
customer_id,
status
);