Dela via


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

beskrivning
<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 aggregeringar. 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 första exemplet GROUP BY används -satsen för att skapa grupper av objekt med hjälp av värdet för en angiven egenskap.

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

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

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

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 delmängden av egenskaper och systemfunktioner som ingår i GROUP BY -satsen. Ett undantag är aggregeringsfunktioner, 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 WHERE -satsen 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, egenskaper eller 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.