GROUP BY (NoSQL-query)

VAN TOEPASSING OP: NoSQL

De component GROUP BY verdeelt de resultaten van de query op basis van de waarden van een of meer opgegeven eigenschappen.

Syntaxis

<group_by_clause> ::= GROUP BY <scalar_expression_list>

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

Argumenten

Description
<scalar_expression_list> Hiermee geeft u de expressies op die worden gebruikt om queryresultaten te groeperen (of te verdelen).
<scalar_expression> Elke scalaire expressie is toegestaan, met uitzondering van scalaire subquery's en scalaire aggregaties. Elke scalaire expressie moet ten minste één eigenschapsreferentie bevatten. Er is geen limiet voor het aantal afzonderlijke expressies of de kardinaliteit van elke expressie.

Voorbeelden

Voor de voorbeelden in deze sectie wordt deze referentieset items gebruikt. Elk item bevat een capabilities object dat eigenschappen kan mediaTrained bevattensoftwareDevelopment.

[
  {
    "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 dit eerste voorbeeld wordt de GROUP BY component gebruikt om groepen items te maken met behulp van de waarde van een opgegeven eigenschap.

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

In dit volgende voorbeeld wordt een statistische systeemfunctie (COUNT) gebruikt met de groeperingen om een totaal aantal items per groep op te geven.

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 dit laatste voorbeeld worden de items gegroepeerd met behulp van meerdere eigenschappen.

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

Opmerkingen

  • Wanneer een query een GROUP BY component gebruikt, kan de SELECT component alleen de subset van eigenschappen en systeemfuncties bevatten die zijn opgenomen in de GROUP BY component. Een uitzondering hierop zijn statistische functies, die kunnen worden weergegeven in de SELECT -component zonder dat ze in de GROUP BY -component worden opgenomen. U kunt ook altijd letterlijke waarden opnemen in de SELECT -component.
  • De GROUP BY -component moet na de SELECTcomponent , FROMen WHERE en vóór de OFFSET LIMIT -component staan. U kunt niet gebruiken GROUP BY met een ORDER BY component.
  • De GROUP BY component staat geen van de volgende functies, eigenschappen of functies toe:
    • Aliaseigenschappen of aliasing van systeemfuncties (aliasing is nog steeds toegestaan binnen de SELECT component)
    • Subquery's
    • Statistische systeemfuncties (deze functies zijn alleen toegestaan in de SELECT component)
  • Query's met een statistische systeemfunctie en een subquery met GROUP BY worden niet ondersteund.
  • Query's voor meerdere partities GROUP BY kunnen maximaal 21 statistische systeemfuncties hebben.