Teilen über


GROUP BY (NoSQL-Abfrage)

GILT FÜR: NoSQL

Die GROUP BY-Klausel unterteilt die Ergebnisse der Abfrage anhand der Werte einer oder mehrerer angegebener Eigenschaften.

Syntax

<group_by_clause> ::= GROUP BY <scalar_expression_list>

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

Argumente

Beschreibung
<scalar_expression_list> Gibt die Ausdrücke an, die zum Gruppieren (oder Unterteilen) von Abfrageergebnissen verwendet werden.
<scalar_expression> Ein beliebiger Skalarausdruck ist außer für skalare Unterabfragen und skalare Aggregate zulässig. Jeder Skalarausdruck muss mindestens einen Verweis auf eine Eigenschaft enthalten. Es gibt keine Begrenzung bei der Anzahl von einzelnen Ausdrücken oder der Kardinalität des jeweiligen Ausdrucks.

Beispiele

Für die Beispiele in diesem Abschnitt wird dieser Verweissatz von Elementen verwendet. Jedes Element enthält ein capabilities-Objekt, das softwareDevelopment- und mediaTrained-Eigenschaften enthalten kann.

[
  {
    "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"
  }
]

In diesem ersten Beispiel wird die GROUP BY-Klausel verwendet, um Gruppen von Elementen mithilfe des Werts einer angegebenen Eigenschaft zu erstellen.

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

In diesem nächsten Beispiel wird eine Aggregatsystemfunktion (COUNT) mit den Gruppierungen verwendet, um eine Gesamtanzahl von Elementen pro Gruppe bereitzustellen.

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

In diesem letzten Beispiel werden die Elemente mithilfe von mehreren Eigenschaften gruppiert.

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
  }
]

Hinweise

  • Wenn eine Abfrage eine GROUP BY-Klausel verwendet, kann die SELECT-Klausel nur die Teilmenge von Eigenschaften und Systemfunktionen enthalten, die in der GROUP BY-Klausel enthalten ist. Eine Ausnahme bilden aggregierte Funktionen, die in der SELECT-Klausel vorkommen können, ohne dass sie in der GROUP BY-Klausel enthalten sind. Sie können in die SELECT-Klausel auch immer Literalwerte einbeziehen.
  • Die GROUP BY-Klausel muss hinter der SELECT-, FROM- und WHERE-Klausel und vor der OFFSET LIMIT-Klausel stehen. Sie können GROUP BY bei einer ORDER BY-Klausel nicht verwenden.
  • Die GROUP BY Klausel lässt keine der folgenden Features, Eigenschaften oder Funktionen zu:
    • Aliasing von Eigenschaften oder Systemfunktionen (in der SELECT-Klausel ist Aliasing weiterhin zulässig)
    • Unterabfragen
    • Aggregierte Systemfunktionen (diese Funktionen sind nur in der SELECT-Klausel zulässig)
  • Abfragen mit einer Aggregatsystemfunktion und einer Unterabfrage mit GROUP BY werden nicht unterstützt.
  • Partitionsübergreifende GROUP BY-Abfragen können maximal 21 Aggregatsystemfunktionen enthalten.