makeitrein

makeitrein

Syntax for composing Ecto queries with virtual/aggregate columns?

Happy Friday, would love to query the elixir forum hive mind to get some help on an ecto problem that’s been bothering me today…

I have the following base query for my Fic model…

   def summary_query(query) do
    from f in query,
         left_join: r in assoc(f, :reviews),
         group_by: f.id,
         preload: [
           :submitter,
           :genres,
           reviews: :submitter,
         ],
         select: %{
           f |
           review_count: fragment("count(?) as review_count", r.id),
           review_avg: fragment("coalesce(?::float, 0) as review_avg", avg(r.rating))
         }
  end

I’d like to compose my summary query with some sorting and filtering queries. These sorting and filtering queries need to use the computed review_count and review_avg columns…

Example: Fic |> summary_query |> at_least_ten_reviews_query

Unfortunately, when I try to do either this…
from f in query, where: f.review_avg > 10

Or…
from f in query, where: fragment("review_avg") > 10

I get errors, either saying that “field review_avg in where is a virtual field in schema Ficdb.Fanfics.Fanfic in query:” or “column “review_avg” does not exist”

What’s the correct syntax for working with these virtual/aggregate columns? Thx!

Marked As Solved

amarraja

amarraja

It’s more a SQL thing than Ecto, but to filter by aggregate fields you need to use “having”, not “where”

https://hexdocs.pm/ecto/Ecto.Query.html#having/3

Where Next?

Popular in Questions Top

chrisalley
ExUnit now has describe blocks which is a welcome addition coming from RSpec. In the docs, it states that nested hierarchies of describe ...
New
lessless
I believe there are people here who are dealing with CSV files import on the daily basis, and since Excel is a really popular tool there ...
New
vrod
I am using the Starship cross-shell prompt – it seems pretty nice, but I get some errors: [WARN] - (starship::utils): Executing command ...
New
alice
Hey, Just curious what are the main benefits of Elixir compared to Clojure? When is Elixir more useful than Clojure and vice versa? Th...
New
aalberti333
As the title describes, I’m trying to run Enum.map() over a list of key/value pairs, where the value is a map. My data looks like this: ...
New
jerry
Good day to you all. I have been struggling to get a query involving like and ilike to work. Can anyone assist me on this, please? pro...
New
SoCreat
i’m a new one to elixir which editor can i use vs code? or atom? Thanks! :smiley:
New
chensan
I have a User schema with a :from_id field set to type :string: defmodule TweetBot.Repo.Migrations.CreateUsers do use Ecto.Migration ...
New
joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 record...
New
WestKeys
Currently suffering from paralysis by [HTTP client] analysis. This is rather unusual in Elixirland as there tends to be consensus on the ...
New

Other popular topics Top

Nvim
Anybody knows a comprehensive comparison of Django and Phoenix, thanks for the help. Where are they similar? Where do they differ the m...
New
electic
Hi, I am new to Elixir. I am trying to use the DateTime component to insert a date into MySQL however the there seems to be no way to fo...
New
New
joeerl
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New
jononomo
I am trying to figure out how Mix knows whether the environment is test, dev, or prod -- where is this set? Thanks.
New
malloryerik
Hi, this is for people who, like me, have had some friction using .html.heex templates in VSCode. The solution seems to be, in a hyphena...
New
nobody
Hi! In PHP: $SERVER['SERVERADDR'] - in Elixir? Searched the docs for ip address and the web, no good results. Thanks!
New
boundedvariable
I am going through the kafka architecture. All the features what the kafka is providing are already in Erlang. I would like hear your opi...
New
marick
I had some trouble figuring out how to make many-to-many associations work. Once I got it working, I wrote a blog post. Because I'm a nov...
New
lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New

We're in Beta

About us Mission Statement