Yama
Sorry for asking something that has been mentioned a few times here but would like some help to get a better understanding. What I’m trying to do is be able to return a list of tags with the number of posts that has a tag associated with it.
subquery = from(pt in PostTag, select: %{postCount: count(pt.tag_id)}, group_by: pt.tag_id)
query =
from(t in Tag,
join: pt in subquery(subquery),
on: t.id == pt.tag_id,
where: ilike(t.name, ^search),
select: %{id: t.id, name: t.name, count: pt.postCount},
group_by: t.id
)
We want to be able to return something like %{id: "1", count: 4} where the count is the number of posts associated with that tag. I currently have 3 tables, Post, Tag, and PostTags which connects the other two as many to many association.
I was hoping to get a better understanding of why I’m getting this error t0.id" must appear in the GROUP BY clause or be used in an aggregate function.
Thanks for the help and clarity in regards to this problem and pointing in the right direction in solving it.
Trending in Questions
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
Documentation
While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
Hello,
I’m trying to build a basic Phoenix web-app, and I’d like to use Tailwind.
However, when I launch mix phx.server, I get an error...
New
Hi everyone,
I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding.
I sta...
New
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
I’m working on a small exercise involving update_in/3, and I came up with this solution:
data = %{
name: "Periodic Table",
category:...
New
I’ve got trouble wrapping my head around the order in which functions are called in this snippet (from Phoenix’s authentication):
toke...
New
Other Trending Topics
Edit: 2026 May 15 - This post is archived.
Mob is alive!!
Main docs: mob v0.7.11 — Documentation
A bit of explanation for the slightly c...
New
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
I am happy to introduce the very α version of the new programming language compiled to BEAM.
Welcome Cure.
It has literally three kille...
New
Hobbes is a low-level distributed database for the Elixir programming language.
Hobbes provides a simple, safe, and scalable storage lay...
New
Hi everyone!
The first release candidate for the Expert language server project is now available!
We’ve published a press release detai...
New
A little off-topic, but I feel like people here have a good head on their shoulders.
I used to be quite good at making software. Was luc...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ai
- #ecto-query
- #elixirconf-us
- #blog-post
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #elixirconf-eu
- #api
- #forms
- #metaprogramming
- #hex










Showing Posts 1 to 5- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
Yama
I believe I may have found a solution. Would love some input if there is a better approach or maybe some flaws so what seems to be working. Thanks again
OvermindDL1
Nothing to do with ecto, that error was coming from your SQL server.
And I’d guess it was because the subquery made no export of
tag_id, the select only returnedpostCountwithout any correlation of matching.Personally I would not have had a subquery, rather just a (left_)join and group based on the id/name and aggregate (count) the post’s table.
dalerka
I’m also interested and couldn’t find an example for such common use case in Ecto docs.
Is this efficient way to do it?
Do you mind sharing some code example, eg. a best practice of doing this with Ecto?
Also, do you recommend “caching” the count of related Posts on Tag schema, eg.
Tag.posts_countand how to do it efficiently (maybe with Ecto.Multi upon PostTag insert?) in many-to-many relations?Basically, I’d like to list all tags (could be hundreds) and have the count of relevant posts attached to each tag returned from the DB, and have the counts update (in a liveview) as posts being created with some tags. What’s the wiser way to implement this?
dalerka
So, as recommended here… we can add a virtual
posts_countfield toTagschema.Also we need to convert the maps returned by the query into structs as follows:
Nicodemus
I found this thread while researching options for adding aggregated results to a list, and would like to propose a different way to do it that doesn’t require any extra mapping or struct building for anyone else looking. Apologies for necro-posting.
First, add a virtual field to the Tag schema:
Then simply merge the aggregate result into the existing list of returned structs, which if there is no
selectin the query it defaults to the full schema (equivalent toselect: t.)