Condividi tramite


GROUP BY (query NoSQL)

SI APPLICA A: NoSQL

La clausola GROUP BY divide i risultati della query in base ai valori di una o più proprietà specificate.

Sintassi

<group_by_clause> ::= GROUP BY <scalar_expression_list>

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

Argomenti

Descrizione
<scalar_expression_list> Specifica le espressioni utilizzate per raggruppare o dividere i risultati della query.
<scalar_expression> È consentita qualsiasi espressione scalare ad eccezione di sottoquery scalari e aggregazioni scalari. Ogni espressione scalare deve includere almeno un riferimento a proprietà. Non esiste alcun limite al numero di singole espressioni o alla cardinalità di ogni espressione.

Esempi

Per gli esempi in questa sezione, viene usato questo set di riferimenti di elementi. Ogni elemento include un capabilities oggetto che può includere softwareDevelopment e mediaTrained proprietà.

[
  {
    "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 questo primo esempio, la GROUP BY clausola viene usata per creare gruppi di elementi usando il valore di una proprietà specificata.

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

In questo esempio seguente viene usata una funzione di sistema di aggregazione (COUNT) con i raggruppamenti per fornire un numero totale di elementi per gruppo.

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

In questo esempio finale gli elementi vengono raggruppati usando più proprietà.

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

Osservazioni:

  • Quando una query usa una GROUP BY clausola , la SELECT clausola può contenere solo il subset di proprietà e funzioni di sistema incluse nella GROUP BY clausola . Un'eccezione è costituita da funzioni di aggregazione, che possono essere visualizzate nella SELECT clausola senza essere incluse nella GROUP BY clausola . È anche possibile includere sempre valori letterali nella SELECT clausola .
  • La GROUP BY clausola deve essere successiva alla SELECTclausola , FROMe WHERE e prima della OFFSET LIMIT clausola . Non è possibile usare GROUP BY con una ORDER BY clausola .
  • La GROUP BY clausola non consente alcuna delle funzionalità, delle proprietà o delle funzioni seguenti:
    • Aliasing di proprietà o funzioni di sistema di aliasing (l'aliasing è ancora consentito all'interno della SELECT clausola)
    • Subqueries (Sottoquery)
    • Funzioni di sistema di aggregazione (queste funzioni sono consentite solo nella SELECT clausola )
  • Le query con una funzione di sistema di aggregazione e una sottoquery con GROUP BY non sono supportate.
  • Le query tra partizioni GROUP BY possono avere un massimo di 21 funzioni di sistema di aggregazione.