Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

[Enhancement]: Let aggregate_records (MCP) compute multiple aggregations in one call (single GROUP BY pass)

Aperta
#3,725 1 commento 1 reazione 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
58/100
Tipo di issue
Funzionalità
Chiarezza
Specificata chiaramente
Stato di attività
Tranquilla
Stack tecnologico
csharp, sql
Ambito
api, database

Direzione di ricerca

Inizia dal parsing degli argomenti di MCP AggregateRecordsTool, quindi segui GroupByMetadata.Aggregations e BaseTSqlQueryBuilder.BuildAggregationColumns, incluso il percorso GraphQL esistente. Supporta l'array aggregations opzionale mantenendo function e field, e verifica che i risultati raggruppati generino una query con alias utilizzabili da orderby e having.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

cri enhancement mcp-server
Is your feature request related to a problem?

The MCP aggregate_records tool accepts only one aggregate per call (function + field). To retrieve several metrics over the same grouping, a client must issue N separate calls, each generating its own query with the same GROUP BY:

SELECT region, SUM(amount) FROM dbo.Sales WHERE ... GROUP BY region
SELECT region, AVG(amount) FROM dbo.Sales WHERE ... GROUP BY region
SELECT region, SUM(cost)   FROM dbo.Sales WHERE ... GROUP BY region

This scans the same rows and recomputes the same GROUP BY N times, plus N× query-planning / result-shaping / round-trip overhead. On large tables/views this is a real, avoidable database cost. Issuing the N calls concurrently on the client side only reduces latency — it does not reduce total DB work and can increase peak load/contention.

Describe the solution you'd like

Allow aggregate_records to accept multiple aggregations in a single call, producing one SELECT with one GROUP BY pass, e.g.:

{
  "entity": "Sales",
  "aggregations": [
    { "function": "sum", "field": "amount", "alias": "sum_amount" },
    { "function": "avg", "field": "amount", "alias": "avg_amount" },
    { "function": "sum", "field": "cost",   "alias": "sum_cost" }
  ],
  "groupby": ["region"],
  "orderby": ["sum_amount desc"]
}

which maps to a single query:

SELECT region, SUM(amount) AS sum_amount, AVG(amount) AS avg_amount, SUM(cost) AS sum_cost
FROM dbo.Sales
WHERE ...
GROUP BY region

orderby/having should be able to reference the aggregate aliases (e.g. sum_amount), consistent with how grouped results are projected.

Why this looks feasible

DAB already builds multi-aggregation queries internally for GraphQL: the shared SqlQueryStructure.GroupByMetadata.Aggregations is a List<AggregationOperation> and BaseTSqlQueryBuilder.BuildAggregationColumns(...) emits all requested aggregate expressions into a single SELECT. The MCP aggregate_records tool (AggregateRecordsTool) currently parses and loads only a single AggregationOperation. Extending its argument parsing to accept an array and pushing multiple AggregationOperations onto the existing structure would reuse the machinery GraphQL already relies on.

Backward compatibility

Keep the current single-metric form (function + field) working as-is; add the new optional aggregations array alongside it. Single-metric callers are unaffected; multi-metric callers opt in.

Additional context
  • Related: #3695 (a separate correctness bug in the aggregate ORDER BY for dwsql). This enhancement is independent of that fix.
  • Benefit is largest for wide analytical tables/views where several measures are aggregated over the same grouping in one logical request.
Lingua principale
C#
Stelle
1.5k
Fork
371
Merge medio
7g 5h
PR unite (30g)
8

Preparare l'ambiente

Apri in Codespaces

Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di Azure/data-api-builder

Tutte le issue di Azure/data-api-builder

Issue simili

Altre issue su C#

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.