GROUP BY (zapytanie NoSQL)

DOTYCZY: NoSQL

Klauzula GROUP BY dzieli wyniki zapytania według wartości co najmniej jednej określonej właściwości.

Składnia

<group_by_clause> ::= GROUP BY <scalar_expression_list>

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

Argumenty

Opis
<scalar_expression_list> Określa wyrażenia, które są używane do grupowania (lub dzielenia) wyników zapytania.
<scalar_expression> Dowolne wyrażenie skalarne jest dozwolone z wyjątkiem podzapytania skalarnego i agregacji skalarnych. Każde wyrażenie skalarne musi zawierać co najmniej jedno odwołanie do właściwości. Nie ma limitu liczby poszczególnych wyrażeń ani kardynalności każdego wyrażenia.

Przykłady

W przykładach w tej sekcji jest używany ten zestaw referencyjny elementów. Każdy element zawiera capabilities obiekt, który może zawierać softwareDevelopment właściwości i mediaTrained .

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

W tym pierwszym przykładzie klauzula GROUP BY jest używana do tworzenia grup elementów przy użyciu wartości określonej właściwości.

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

W następnym przykładzie funkcja systemowa agregacji (COUNT) jest używana z grupami w celu zapewnienia całkowitej liczby elementów na grupę.

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

W tym ostatnim przykładzie elementy są grupowane przy użyciu wielu właściwości.

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

Uwagi

  • Gdy zapytanie używa klauzuli GROUP BY , klauzula SELECT może zawierać tylko podzbiór właściwości i funkcji systemowych zawartych w klauzuli GROUP BY . Jednym z wyjątków są funkcje agregujące, które mogą pojawiać się w klauzuli SELECT bez uwzględniania w klauzuli GROUP BY . Zawsze można również uwzględnić wartości literału w klauzuli SELECT .
  • Klauzula GROUP BY musi znajdować się po klauzuli SELECT, FROMi WHERE przed klauzulą OFFSET LIMIT . Nie można użyć GROUP BY klauzuli ORDER BY .
  • Klauzula GROUP BY nie zezwala na żadne z następujących funkcji, właściwości ani funkcji:
    • Aliasowanie właściwości lub aliasowania funkcji systemowych (aliasowanie jest nadal dozwolone w klauzuli SELECT )
    • Zapytania podrzędne
    • Funkcje systemowe agregujące (te funkcje są dozwolone tylko w klauzuli SELECT )
  • Zapytania z agregowaną funkcją systemową i podzapytaniem z funkcją GROUP BY nie są obsługiwane.
  • Zapytania obejmujące wiele partycji GROUP BY mogą mieć maksymalnie 21 agregujących funkcji systemowych.