How to do multi selects in Ecto

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
1 Like