GROUP BY (استعلام NoSQL)

ينطبق على: NoSQL

تقسم GROUP BY العبارة نتائج الاستعلام وفقا لقيم خاصية محددة واحدة أو أكثر.

بناء الجملة

<group_by_clause> ::= GROUP BY <scalar_expression_list>

<scalar_expression_list> ::=
          <scalar_expression>
        | <scalar_expression_list>, <scalar_expression>

الوسيطات

‏‏الوصف
<scalar_expression_list> تحديد التعبيرات المستخدمة لتجميع نتائج الاستعلام (أو قسمتها).
<scalar_expression> يُسمح بأي تعبير عددي باستثناء الاستعلامات الفرعية العددية والتجميعات العددية. يجب أن يحتوي كل تعبير عددي على مرجع خاصية واحد على الأقل. لا يوجد حد لعدد التعبيرات الفردية أو العلاقة الأساسية لكل تعبير.

الأمثلة

بالنسبة للأمثلة الموجودة في هذا القسم، يتم استخدام هذه المجموعة المرجعية من العناصر. يتضمن كل عنصر كائنا capabilities قد يتضمن softwareDevelopment خصائص و mediaTrained .

[
  {
    "name": "Jordan Mitchell",
    "capabilities": {
      "softwareDevelopment": "python",
      "mediaTrained": true
    },
    "team": "Cloud software engineering"
  },
  {
    "name": "Mikaela Lee",
    "capabilities": {
      "softwareDevelopment": "javascript",
      "mediaTrained": false
    },
    "team": "Cloud software engineering"
  },
  {
    "name": "Graham Barnes",
    "capabilities": {
      "softwareDevelopment": "c-sharp",
      "mediaTrained": true
    },
    "team": "Cloud software engineering"
  },
  {
    "name": "Hayden Cook",
    "capabilities": {
      "softwareDevelopment": "javascript",
      "mediaTrained": true
    },
    "team": "Cloud software engineering"
  },
  {
    "name": "Morgan Connors",
    "capabilities": {
      "mediaTrained": true
    },
    "team": "Cloud software engineering"
  },
  {
    "name": "Devon Torres",
    "capabilities": {
      "softwareDevelopment": "python",
      "mediaTrained": false
    },
    "team": "Cloud software engineering"
  },
  {
    "name": "Sam Centrell",
    "capabilities": {
      "softwareDevelopment": "javascript",
      "mediaTrained": true
    },
    "team": "Cloud software engineering"
  }
]

في هذا المثال الأول، GROUP BY يتم استخدام عبارة لإنشاء مجموعات من العناصر باستخدام قيمة خاصية محددة.

SELECT 
    e.capabilities.softwareDevelopment AS developmentLang
FROM
    employees e
GROUP BY
    e.capabilities.softwareDevelopment
[
  {
    "developmentLang": "python"
  },
  {
    "developmentLang": "javascript"
  },
  {
    "developmentLang": "c-sharp"
  },
  {}
]

في هذا المثال التالي، يتم استخدام دالة نظام تجميعية (COUNT) مع التجميعات لتوفير إجمالي عدد العناصر لكل مجموعة.

SELECT 
    COUNT(1) AS trainedEmployees, 
    e.capabilities.softwareDevelopment AS developmentLang
FROM
    employees e
GROUP BY
    e.capabilities.softwareDevelopment
[
  {
    "trainedEmployees": 2,
    "developmentLang": "python"
  },
  {
    "trainedEmployees": 3,
    "developmentLang": "javascript"
  },
  {
    "trainedEmployees": 1,
    "developmentLang": "c-sharp"
  },
  {
    "trainedEmployees": 1
  }
]

في هذا المثال النهائي، يتم تجميع العناصر باستخدام خصائص متعددة.

SELECT 
    COUNT(1) AS employeesWithThisTraining, 
    e.capabilities.softwareDevelopment AS developmentLang,
    e.capabilities.mediaTrained AS mediaReady
FROM
    employees e
GROUP BY
    e.capabilities.softwareDevelopment,
    e.capabilities.mediaTrained
[
  {
    "employeesWithThisTraining": 1,
    "developmentLang": "python",
    "mediaReady": true
  },
  {
    "employeesWithThisTraining": 1,
    "developmentLang": "javascript",
    "mediaReady": false
  },
  {
    "employeesWithThisTraining": 1,
    "developmentLang": "c-sharp",
    "mediaReady": true
  },
  {
    "employeesWithThisTraining": 2,
    "developmentLang": "javascript",
    "mediaReady": true
  },
  {
    "employeesWithThisTraining": 1,
    "mediaReady": true
  },
  {
    "employeesWithThisTraining": 1,
    "developmentLang": "python",
    "mediaReady": false
  }
]

الملاحظات

  • عندما يستخدم استعلام عبارة GROUP BY ، يمكن أن تحتوي العبارة SELECT فقط على مجموعة فرعية من الخصائص ووظائف النظام المضمنة في العبارة GROUP BY . استثناء واحد هو الدالات التجميعية، والتي يمكن أن تظهر في العبارة SELECT دون تضمينها في العبارة GROUP BY . يمكنك أيضا دائما تضمين القيم الحرفية في SELECT عبارة .
  • GROUP BY يجب أن تكون العبارة SELECTبعد عبارة و FROMو WHERE وقبل العبارة OFFSET LIMIT . لا يمكنك استخدام GROUP BY مع عبارة ORDER BY .
  • GROUP BY لا تسمح العبارة بأي من الميزات أو الخصائص أو الوظائف التالية:
    • تسمية خصائص الاسم المستعار أو تسمية وظائف النظام بالاسم المستعار (لا يزال يسمح بالاسم المستعار ضمن العبارة SELECT )
    • Subqueries
    • دالات النظام التجميعية (يسمح بهذه الدالات فقط في SELECT عبارة )
  • الاستعلامات التي لها وظيفة نظام تجميعية واستعلام فرعي بها GROUP BY غير مدعومة.
  • يمكن أن تحتوي الاستعلامات عبر الأقسام GROUP BY على 21 وظيفة نظام تجميعية كحد أقصى.