Udostępnij za pośrednictwem


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 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 pojedynczych wyrażeń ani kardynalności każdego wyrażenia.

Przykłady

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

[
  {
    "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": "c-sharp"
  },
  {
    "developmentLang": "javascript"
  },
  {
    "developmentLang": "python"
  }
]

W następnym przykładzie funkcja systemu agregacji (COUNT) jest używana z grupowaniami 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": 1
  },
  {
    "trainedEmployees": 1,
    "developmentLang": "c-sharp"
  },
  {
    "trainedEmployees": 3,
    "developmentLang": "javascript"
  },
  {
    "trainedEmployees": 2,
    "developmentLang": "python"
  }
]

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ą występować 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 aliasów funkcji systemowych (aliasowanie jest nadal dozwolone w klauzuli SELECT )
    • Zapytania podrzędne
    • Funkcje systemu agregacji (te funkcje są dozwolone tylko w klauzuli SELECT )
  • Zapytania z funkcją systemową agregacji i podzapytaniem za GROUP BY pomocą polecenia nie są obsługiwane.
  • Zapytania obejmujące wiele partycji GROUP BY mogą mieć maksymalnie 21 zagregowanych funkcji systemowych.