Ruby Sequel Subquery происходит перед основным запросом

Может ли кто-нибудь помочь мне с этим?

Мне нужен следующий SQL-код, переведенный в продолжение:

SELECT DISTINCT sales_leads.employee_person_id,
    (SELECT full_name from persons 
        WHERE sales_leads.employee_person_id=persons.id),
    (SELECT COUNT (sales_leads.id) from sales_leads 
        WHERE sales_leads.employee_person_id=employees.person_id 
        AND sales_leads.status='open') AS open_leads_count,
    (SELECT COUNT (sales_leads.id) from sales_leads 
        WHERE sales_leads.employee_person_id=employees.person_id 
        AND sales_leads.status='lost' OR sales_leads.status='won') AS closed_leads_count
FROM sales_leads
JOIN employees ON sales_leads.employee_person_id=employees.person_id
ORDER BY sales_leads.employee_person_id;

Это то, что я до сих пор:

DB[:sales_leads]
  .inner_join(:persons, id: :employee_person_id)
  .select(:full_name)
  .select_append(
    DB[:sales_leads]
      .select(:id)
      .where(Sequel[:sales_leads][:employee_person_id]=>Sequel[:persons][:id])
      .count
  ).all

Но я получаю ошибку:

PG:: UndefinedTable: ОШИБКА: отсутствует запись предложения FROM для таблицы "Person" LINE 1: ...eads" WHERE ("sales_leads"." Employee_person_id" = " Person ".... ^: SELECT count(*) AS "count" FROM "sales_leads" WHERE ("sales_leads"."employee_person_id" = "people"."id") LIMIT 1 Sequel::DatabaseError: PG::UndefinedTable: ERROR: отсутствует запись в предложении FROM для таблицы "person" LINE 1: ...eads" WHERE ("sales_leads"." Employee_person_id" = " персон ".... ^ из /home/john/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/sequel-5.5.0/lib/sequel/adapters/postgres.rb:145: в `async_exec'

1 ответ

Решение

Ты звонишь Dataset#count в наборе данных, который вы передаете вызову select_append, и Dataset#count запускает запрос Вы, вероятно, хотите .select{count(sales_leads[:id])} вместо .count,

Другие вопросы по тегам