It seems that PostgreSQL can’t compare UUIDs directly but only use them in JOINS. Try this version:
defp counts(category_id, version_id) do
"records"
|> where([category_id: ^category_id])
|> join(:left, [r], q in "records", r.id == q.id and r.version_id == ^version_id)
|> group_by([r,q], [r.version_id, q.version_id])
|> select([r,q],%{
version_id: r.version_id,
is_latest: not(is_nil(q.version_id)),
record_count: count(r.id)
})
|> subquery()
|> select([s],%{
total: type(sum(s.record_count), :integer),
versions: count(s.version_id),
latest: type(
fragment("SUM(CASE WHEN ? THEN ? ELSE 0 END)", s.is_latest, s.record_count),
:integer
)
})
|> Repo.one()
end




















