جملة المجموعة حسب

GROUP BYيتم استخدام العبارة لتجميع الصفوف استنادا إلى مجموعة من تعبيرات التجميع المحددة وحساب التجميعات على مجموعة الصفوف استنادا إلى دالة تجميع محددة أو أكثر. يدعم Databricks Runtime أيضا التجميعات المتقدمة للقيام بتجميعات متعددة لنفس سجل الإدخال الذي تم تعيينه عبر GROUPING SETSCUBE ، ، ROLLUP جمل. يمكن خلط تعبيرات التجميع والتجميعات المتقدمة في GROUP BY الجملة وتداخلها في GROUPING SETS جملة.

اطلع على مزيد من التفاصيل في قسم تحليلات التجميع المختلط/المتداخل.

عندما FILTER يتم إرفاق جملة دالة تجميعية، يتم تمرير الصفوف المطابقة فقط إلى تلك الدالة.

بناء الجملة

GROUP BY group_expression [, ...] [ WITH ROLLUP | WITH CUBE ]

GROUP BY { group_expression | { ROLLUP | CUBE | GROUPING SETS } ( grouping_set [, ...] ) } [, ...]

grouping_set
   { expression |
     ( [ expression [, ...] ] ) }

بينما يتم تعريف الدالات التجميعية ك

aggregate_name ( [ DISTINCT ] expression [, ...] ) [ FILTER ( WHERE boolean_expression ) ]

المعلمات

  • group_expression

    تعين المعايير التي يتم تجميع الصفوف عليها معا. يتم تنفيذ تجميع الصفوف استنادا إلى قيم النتائج لتعبيرات التجميع. قد يكون تعبير التجميع اسم عمود مثل GROUP BY a, a أو موضع عمود مثل أو تعبير مثل GROUP BY 0GROUP BY a + b .

  • grouping_set

    يتم تحديد مجموعة التجميع بواسطة صفر أو أكثر من التعبيرات المنفصلة بفاصلة بين قوسين. عندما يكون لمجموعة التجميع عنصر واحد فقط، يمكن حذف الأقواس. على سبيل المثال، مجموعات التجميع ((أ)، (ب)) هي نفس مجموعات التجميع (أ، ب).

  • مجموعات التجميع

    تجميع الصفوف لكل مجموعة تجميع محددة بعد GROUPING SETS . على سبيل المثال:

    GROUP BY GROUPING SETS ((warehouse), (product)) هو مساوي دلاليا لاتحاد من نتائج GROUP BY warehouse و GROUP BY product .

    هذه الجملة هي اختصار لكل UNION ALL ساق من المشغل تنفيذ التجميع لكل مجموعة تجميع UNION ALL المحددة في GROUPING SETS الجملة.

    وبالمثل، GROUP BY GROUPING SETS ((warehouse, product), (product), ()) هو مساوي دلاليا لاتحاد نتائج ، GROUP BY warehouse, productGROUP BY product وإجمالي عالمي.

ملاحظة

لخلية التوافق Databricks وقت التشغيل يسمح GROUP BY ... GROUPING SETS (...) . GROUP BYعادة ما يتم تجاهل التعبيرات ولكن إذا كانت تحتوي على تعبيرات إضافية بالإضافة إلى GROUPING SETS التعبيرات، سيتم تضمين التعبيرات الإضافية في تعبيرات التجميع وتكون القيمة دائما فارغة. على سبيل المثال، SELECT a, b, c FROM ... GROUP BY a, b, c GROUPING SETS (a, b) يكون إخراج العمود c دوما null.

  • الطرح

    تحديد مستويات متعددة من التجميعات في عبارة واحدة. يتم استخدام هذه الجملة لحساب التجميعات استنادا إلى مجموعات تجميع متعددة. ROLLUP هو اختصار ل GROUPING SETS . على سبيل المثال:

    GROUP BY warehouse, product WITH ROLLUP أو GROUP BY ROLLUP(warehouse, product) ما يعادل

    GROUP BY GROUPING SETS((warehouse, product), (warehouse), ()).

    بينما GROUP BY ROLLUP(warehouse, product, (warehouse, location))

    يعادل GROUP BY GROUPING SETS((warehouse, product, location), (warehouse, product), (warehouse), ()) .

    عناصر N من ROLLUP نتيجة مواصفات في N +1 GROUPING SETS .

  • مكعب

    CUBEيتم استخدام العبارة لتنفيذ التجميعات استنادا إلى مجموعة من أعمدة التجميع المحددة في GROUP BY الجملة. CUBE هو اختصار ل GROUPING SETS . على سبيل المثال:

    GROUP BY warehouse, product WITH CUBE أو GROUP BY CUBE(warehouse, product) ما يعادل

    GROUP BY GROUPING SETS((warehouse, product), (warehouse), (product), ()).

    بينما GROUP BY CUBE(warehouse, product, (warehouse, location))

    يعادل GROUP BY GROUPING SETS((warehouse, product, location), (warehouse, product), (warehouse, location), (product, warehouse, location), (warehouse), (product), (warehouse, product), ()) .

    ينتج عن عناصر N من CUBE مواصفات 2 ^N GROUPING SETS .

  • aggregate_name

    اسم دالة تجميعية (MIN، MAX، COUNT، SUM، متوسط، إلخ).

  • متميزه

    إزالة التكرارات في صفوف الإدخال قبل تمريرها إلى دالات التجميع.

  • راووق

    تصفية صفوف الإدخال التي boolean_expression يتم WHERE تمريرها في الجملة تقييم إلى true إلى الدالة التجميعية; يتم تجاهل الصفوف الأخرى.

###m تحليلات التجميع المختلطة/المتداخلة

GROUP BYيمكن أن تتضمن جملة group_expressions متعددة و CUBEROLLUP متعددة و , و GROUPING SETS s.

GROUPING SETS يمكن أيضا أن يكون متداخلة CUBEROLLUP ، ، أو GROUPING SETS عبارات. على سبيل المثال:

GROUPING SETS(ROLLUP(warehouse, location), CUBE(warehouse, location)), GROUPING SETS(warehouse, GROUPING SETS(location, GROUPING SETS(ROLLUP(warehouse, location), CUBE(warehouse, location))))

CUBEROLLUPوهو مجرد بناء الجملة السكر GROUPING SETS ل. يرجى الرجوع إلى الأقسام أعلاه لكيفية الترجمة CUBEROLLUP و. GROUPING SETS group_expression يمكن التعامل معها كمجموعة واحدة GROUPING SETS في هذا السياق.

لعدة GROUPING SETS في GROUP BY جملة، Databricks Runtime يولد واحدة GROUPING SETS عن طريق القيام عبر المنتج الأصلي GROUPING SETS .

لتداخل GROUPING SETS في GROUPING SETS جملة، Databricks وقت التشغيل ببساطة يأخذ مجموعات التجميع الخاصة به وشرائط لهم. على سبيل المثال:

GROUP BY warehouse, GROUPING SETS((product), ()), GROUPING SETS((location, size), (location), (size), ()) و

GROUP BY warehouse, ROLLUP(product), CUBE(location, size)

تعادل GROUP BY GROUPING SETS( (warehouse, product, location, size), (warehouse, product, location), (warehouse, product, size), (warehouse, product), (warehouse, location, size), (warehouse, location), (warehouse, size), (warehouse)) .

بينما GROUP BY GROUPING SETS(GROUPING SETS(warehouse), GROUPING SETS((warehouse, product)))

يعادل GROUP BY GROUPING SETS((warehouse), (warehouse, product)) .

أمثلة

CREATE TABLE dealer (id INT, city STRING, car_model STRING, quantity INT);
INSERT INTO dealer VALUES
    (100, 'Fremont', 'Honda Civic', 10),
    (100, 'Fremont', 'Honda Accord', 15),
    (100, 'Fremont', 'Honda CRV', 7),
    (200, 'Dublin', 'Honda Civic', 20),
    (200, 'Dublin', 'Honda Accord', 10),
    (200, 'Dublin', 'Honda CRV', 3),
    (300, 'San Jose', 'Honda Civic', 5),
    (300, 'San Jose', 'Honda Accord', 8);

-- Sum of quantity per dealership. Group by `id`.
> SELECT id, sum(quantity) FROM dealer GROUP BY id ORDER BY id;
  id sum(quantity)
 --- -------------
 100            32
 200            33
 300            13

-- Use column position in GROUP by clause.
> SELECT id, sum(quantity) FROM dealer GROUP BY 1 ORDER BY 1;
  id sum(quantity)
 --- -------------
 100            32
 200            33
 300            13

-- Multiple aggregations.
-- 1. Sum of quantity per dealership.
-- 2. Max quantity per dealership.
> SELECT id, sum(quantity) AS sum, max(quantity) AS max
    FROM dealer GROUP BY id ORDER BY id;
  id sum max
 --- --- ---
 100  32  15
 200  33  20
 300  13   8

-- Count the number of distinct dealers in cities per car_model.
> SELECT car_model, count(DISTINCT city) AS count FROM dealer GROUP BY car_model;
    car_model count
 ------------ -----
  Honda Civic     3
    Honda CRV     2
 Honda Accord     3

-- Sum of only 'Honda Civic' and 'Honda CRV' quantities per dealership.
> SELECT id,
         sum(quantity) FILTER (WHERE car_model IN ('Honda Civic', 'Honda CRV')) AS `sum(quantity)`
    FROM dealer
    GROUP BY id ORDER BY id;
  id sum(quantity)
 --- -------------
 100            17
 200            23
 300             5

-- Aggregations using multiple sets of grouping columns in a single statement.
-- Following performs aggregations based on four sets of grouping columns.
-- 1. city, car_model
-- 2. city
-- 3. car_model
-- 4. Empty grouping set. Returns quantities for all city and car models.
> SELECT city, car_model, sum(quantity) AS sum
    FROM dealer
    GROUP BY GROUPING SETS ((city, car_model), (city), (car_model), ())
    ORDER BY city;
      city    car_model sum
 --------- ------------ ---
      null         null  78
      null  HondaAccord  33
      null     HondaCRV  10
      null   HondaCivic  35
    Dublin         null  33
    Dublin  HondaAccord  10
    Dublin     HondaCRV   3
    Dublin   HondaCivic  20
   Fremont         null  32
   Fremont  HondaAccord  15
   Fremont     HondaCRV   7
   Fremont   HondaCivic  10
  San Jose         null  13
  San Jose  HondaAccord   8
  San Jose   HondaCivic   5

-- Group by processing with `ROLLUP` clause.
-- Equivalent GROUP BY GROUPING SETS ((city, car_model), (city), ())
> SELECT city, car_model, sum(quantity) AS sum
    FROM dealer
    GROUP BY city, car_model WITH ROLLUP
    ORDER BY city, car_model;
      city    car_model sum
 --------- ------------ ---
      null         null  78
    Dublin         null  33
    Dublin  HondaAccord  10
    Dublin     HondaCRV   3
    Dublin   HondaCivic  20
   Fremont         null  32
   Fremont  HondaAccord  15
   Fremont     HondaCRV   7
   Fremont   HondaCivic  10
  San Jose         null  13
  San Jose  HondaAccord   8
  San Jose   HondaCivic   5

-- Group by processing with `CUBE` clause.
-- Equivalent GROUP BY GROUPING SETS ((city, car_model), (city), (car_model), ())
> SELECT city, car_model, sum(quantity) AS sum
    FROM dealer
    GROUP BY city, car_model WITH CUBE
    ORDER BY city, car_model;
      city    car_model sum
 --------- ------------ ---
      null         null  78
      null  HondaAccord  33
      null     HondaCRV  10
      null   HondaCivic  35
    Dublin         null  33
    Dublin  HondaAccord  10
    Dublin     HondaCRV   3
    Dublin   HondaCivic  20
   Fremont         null  32
   Fremont  HondaAccord  15
   Fremont     HondaCRV   7
   Fremont   HondaCivic  10
  San Jose         null  13
  San Jose  HondaAccord   8
  San Jose   HondaCivic   5

--Prepare data for ignore nulls example
> CREATE TABLE person (id INT, name STRING, age INT);
> INSERT INTO person VALUES
    (100, 'Mary', NULL),
    (200, 'John', 30),
    (300, 'Mike', 80),
    (400, 'Dan' , 50);

--Select the first row in column age
> SELECT FIRST(age) FROM person;
  first(age, false)
 --------------------
  NULL

--Get the first row in column `age` ignore nulls,last row in column `id` and sum of column `id`.
> SELECT FIRST(age IGNORE NULLS), LAST(id), SUM(id) FROM person;
  first(age, true)    last(id, false)    sum(id)
 ------------------- ------------------ ----------
  30                  400                1000