GROUP BY (NoSQL-fråga)

GÄLLER FÖR: NoSQL

Satsen GROUP BY delar upp frågans resultat enligt värdena för en eller flera angivna egenskaper.

Syntax

<group_by_clause> ::= GROUP BY <scalar_expression_list>

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

Argument

Description
<scalar_expression_list> Anger de uttryck som används för att gruppera (eller dela upp) frågeresultat.
<scalar_expression> Alla skalära uttryck tillåts förutom skalära underfrågor och skalära aggregat. Varje skalärt uttryck måste innehålla minst en egenskapsreferens. Det finns ingen gräns för antalet enskilda uttryck eller kardinaliteten för varje uttryck.

Exempel

För exemplen i det här avsnittet används den här referensuppsättningen med objekt. Varje objekt innehåller ett capabilities objekt som kan innehålla softwareDevelopment och mediaTrained egenskaper.

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

I det här första exemplet GROUP BY används -satsen för att skapa grupper med objekt med värdet för en angiven egenskap.

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

I nästa exempel används en aggregerad systemfunktion (COUNT) med grupperingar för att tillhandahålla totalt antal objekt per grupp.

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

I det här sista exemplet grupperas objekten med flera egenskaper.

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

Kommentarer

  • När en fråga använder en GROUP BY -sats SELECT kan satsen bara innehålla den delmängd av egenskaper och systemfunktioner som ingår i GROUP BY -satsen. Ett undantag är mängdfunktioner, som kan visas i SELECT -satsen utan att inkluderas i GROUP BY -satsen. Du kan också alltid inkludera literalvärden i SELECT -satsen.
  • Satsen GROUP BY måste vara efter SELECT- , FROMoch-satsen WHERE och före OFFSET LIMIT -satsen. Du kan inte använda GROUP BY med en ORDER BY sats.
  • Satsen GROUP BY tillåter inte någon av följande funktioner:
    • Aliasegenskaper eller aliassystemfunktioner (alias tillåts SELECT fortfarande i -satsen)
    • Underfrågor
    • Aggregerade systemfunktioner (dessa funktioner tillåts endast i - SELECT satsen)
  • Frågor med en aggregerad systemfunktion och en underfråga med GROUP BY stöds inte.
  • Frågor mellan partitioner GROUP BY kan ha högst 21 aggregerade systemfunktioner.