I'm trying to allow for passing in a field name and running it in an Ecto query expression dynamically, like so:
def count_distinct(query, field_name) when is_binary(field_name) do
query
|> select([x], count(Map.fetch!(x, field_name), :distinct))
end
However, I get this compilation error:
(Ecto.Query.CompileError) `Map.fetch!(x, field_name)` is not a valid query expression
Is there any way to accomplish this?
You need to use field/2 to dynamically generate fields in queries:
An example using the other query syntax for completion: