Skip to content

Support ordering grouped results based on aggregates#481

Merged
kevin-dp merged 3 commits intomainfrom
kevin/support-groupby-with-orderby
Sep 3, 2025
Merged

Support ordering grouped results based on aggregates#481
kevin-dp merged 3 commits intomainfrom
kevin/support-groupby-with-orderby

Conversation

@kevin-dp
Copy link
Copy Markdown
Contributor

@kevin-dp kevin-dp commented Sep 2, 2025

Fixes #466 such that queries can order grouped results based on aggregates. This means we support queries like this one:

q
  .from({ vehicleDocuments: vehicleDocumentCollection })
  .groupBy((q) => q.vehicleDocuments.vin)
  .orderBy(
    (q) => max(q.vehicleDocuments.updatedAt), // couldn't do this before
    "desc"
  )
  .select((q) => ({
    vin: q.vehicleDocuments.vin,
    updatedAt: max(q.vehicleDocuments.updatedAt),
  }))

@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Sep 2, 2025

🦋 Changeset detected

Latest commit: 1526285

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 8 packages
Name Type
@tanstack/db Patch
@tanstack/electric-db-collection Patch
@tanstack/query-db-collection Patch
@tanstack/react-db Patch
@tanstack/solid-db Patch
@tanstack/svelte-db Patch
@tanstack/trailbase-db-collection Patch
@tanstack/vue-db Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@pkg-pr-new
Copy link
Copy Markdown

pkg-pr-new Bot commented Sep 2, 2025

More templates

@tanstack/db

npm i https://pkg.pr.new/@tanstack/db@481

@tanstack/db-ivm

npm i https://pkg.pr.new/@tanstack/db-ivm@481

@tanstack/electric-db-collection

npm i https://pkg.pr.new/@tanstack/electric-db-collection@481

@tanstack/query-db-collection

npm i https://pkg.pr.new/@tanstack/query-db-collection@481

@tanstack/react-db

npm i https://pkg.pr.new/@tanstack/react-db@481

@tanstack/solid-db

npm i https://pkg.pr.new/@tanstack/solid-db@481

@tanstack/svelte-db

npm i https://pkg.pr.new/@tanstack/svelte-db@481

@tanstack/trailbase-db-collection

npm i https://pkg.pr.new/@tanstack/trailbase-db-collection@481

@tanstack/vue-db

npm i https://pkg.pr.new/@tanstack/vue-db@481

commit: 1526285

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Sep 2, 2025

Size Change: +99 B (+0.15%)

Total Size: 64.8 kB

Filename Size Change
./packages/db/dist/esm/query/compiler/group-by.js 2.09 kB +28 B (+1.36%)
./packages/db/dist/esm/query/compiler/index.js 2.16 kB +7 B (+0.33%)
./packages/db/dist/esm/query/compiler/order-by.js 1.23 kB +64 B (+5.48%) 🔍
ℹ️ View Unchanged
Filename Size
./packages/db/dist/esm/change-events.js 1.13 kB
./packages/db/dist/esm/collection.js 10.4 kB
./packages/db/dist/esm/deferred.js 230 B
./packages/db/dist/esm/errors.js 3 kB
./packages/db/dist/esm/index.js 1.52 kB
./packages/db/dist/esm/indexes/auto-index.js 745 B
./packages/db/dist/esm/indexes/base-index.js 605 B
./packages/db/dist/esm/indexes/btree-index.js 1.74 kB
./packages/db/dist/esm/indexes/lazy-index.js 1.25 kB
./packages/db/dist/esm/local-only.js 827 B
./packages/db/dist/esm/local-storage.js 2.03 kB
./packages/db/dist/esm/optimistic-action.js 294 B
./packages/db/dist/esm/proxy.js 3.87 kB
./packages/db/dist/esm/query/builder/functions.js 575 B
./packages/db/dist/esm/query/builder/index.js 3.83 kB
./packages/db/dist/esm/query/builder/ref-proxy.js 890 B
./packages/db/dist/esm/query/compiler/evaluators.js 1.48 kB
./packages/db/dist/esm/query/compiler/expressions.js 631 B
./packages/db/dist/esm/query/compiler/joins.js 2.36 kB
./packages/db/dist/esm/query/compiler/select.js 655 B
./packages/db/dist/esm/query/ir.js 466 B
./packages/db/dist/esm/query/live-query-collection.js 333 B
./packages/db/dist/esm/query/live/collection-config-builder.js 2.56 kB
./packages/db/dist/esm/query/live/collection-subscriber.js 2.4 kB
./packages/db/dist/esm/query/optimizer.js 2.63 kB
./packages/db/dist/esm/SortedMap.js 1.24 kB
./packages/db/dist/esm/transactions.js 2.29 kB
./packages/db/dist/esm/utils.js 943 B
./packages/db/dist/esm/utils/btree.js 6.02 kB
./packages/db/dist/esm/utils/comparison.js 718 B
./packages/db/dist/esm/utils/index-optimization.js 1.62 kB

compressed-size-action::db-package-size

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Sep 2, 2025

Size Change: 0 B

Total Size: 1.16 kB

ℹ️ View Unchanged
Filename Size
./packages/react-db/dist/esm/index.js 152 B
./packages/react-db/dist/esm/useLiveQuery.js 1.01 kB

compressed-size-action::react-db-package-size

@kevin-dp kevin-dp requested a review from samwillis September 2, 2025 08:18
Copy link
Copy Markdown
Collaborator

@samwillis samwillis left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM :shipit:

We should file a bug to investigate adding the results namespace for directly accessing the selected data in an orderby that we discussed.

@kevin-dp kevin-dp merged commit d469c39 into main Sep 3, 2025
6 checks passed
@kevin-dp kevin-dp deleted the kevin/support-groupby-with-orderby branch September 3, 2025 07:22
@github-actions github-actions Bot mentioned this pull request Sep 1, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Wrong order when ordering grouped results based on aggregated value

2 participants