On Fri, Feb 26, 2021 at 8:58 AM [email protected] <
[email protected]> wrote:

> Hi Jeremy,
>
> Based on my previous question, how do you use Sequel Models when FROM
> contains distinct?
>
>
> class Email < Sequel::Model; end
>
> SELECT
>     name,
>     string_agg(user_id::text, ',' order by ordering desc)
> FROM (
>     SELECT DISTINCT ON (em.id, c.user_id)
>         *
>     FROM emails em
>     JOIN contacts c ON c.email_id = em.id
> ) s
> GROUP BY name
>
>
> Because, when Email used, FROM becomes "emails"...
>

DB.from{emails.as(:em)}.
  distinct{[em[:id], c[:user_id]]}.
  join(:contacts, {:email_id=>:id}, :table_alias=>:c).
  from_self(:alias=>:s).
  select_group(:name).
  select_append{string_agg(user_id.cast(String), ',').order(ordering.desc)}

SELECT "name", string_agg(CAST("user_id" AS text), ',' ORDER BY "ordering"
DESC)
FROM (
  SELECT DISTINCT ON ("em"."id", "c"."user_id") *
  FROM "emails" AS "em"
  INNER JOIN "contacts" AS "c" ON ("c"."email_id" = "em"."id")
) AS "s"
GROUP BY "name"

You can use Email.from instead of DB.from if you want it to return model
instances.

Thanks,
Jeremy

-- 
You received this message because you are subscribed to the Google Groups 
"sequel-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sequel-talk/CADGZSSeCVMgBzWUuXZo8_6VtM%3D1Z%2BOhoJ2WrcPXKjdD4gg5%3DUw%40mail.gmail.com.

Reply via email to