Подзапрос в knex.js или прямые запросы postgresql в knex.js, используя raw или любые другие альтернативные способы - PullRequest
0 голосов
/ 01 июня 2019

В настоящее время я работаю в проекте express.js и использую knex для переноса базы данных и запросов. У меня проблемы с написанием запросов, чтобы получить точный результат, полученный в postgresql (dbeaver).Ниже приведен запрос, который мне нужно преобразовать в запрос knex (из таблицы). На самом деле хочет получить количество столбцов на основе различных значений столбца (приложений)


select count(job_id) as total_applicants ,

(select count(job_id) from applications as APPL join 
recruiter_positions as POS on POS.position_id=APPL.job_id
where APPL.state='qualified' and POS.creator_id='e5f604be-e773-490b- 
a525-fad3b95fd941') as qlCount,
(select count(job_id) from applications as APPL join 
recruiter_positions as POS on POS.position_id=APPL.job_id
where APPL.state='backup' and POS.creator_id='e5f604be-e773-490b-a525- 
fad3b95fd941') as bckCount,
(select count(job_id) from applications as APPL join 
recruiter_positions as POS on POS.position_id=APPL.job_id
where APPL.state='interview' and POS.creator_id='e5f604be-e773-490b- 
a525-fad3b95fd941') as intrCount,
(select count(job_id) from applications as APPL join 
recruiter_positions as POS on POS.position_id=APPL.job_id
where APPL.state='offer' and POS.creator_id='e5f604be-e773-490b-a525- 
fad3b95fd941') as offrCount,
(select count(job_id) from applications as APPL join 
recruiter_positions as POS on POS.position_id=APPL.job_id
where APPL.state='screening' and POS.creator_id='e5f604be-e773-490b- 
a525-fad3b95fd941') as screenCount,
(select count(job_id) from applications as APPL join 
recruiter_positions as POS on POS.position_id=APPL.job_id
where APPL.state='rejected' and POS.creator_id='e5f604be-e773-490b- 
a525-fad3b95fd941') as rejectedCount

from applications as APPL join recruiter_positions as POS on 
POS.position_id=APPL.job_id
where APPL.state notnull and POS.creator_id='e5f604be-e773-490b-a525- 
fad3b95fd941'

1 Ответ

0 голосов
/ 02 июня 2019

Не преобразуя все для вас, вот как работают подзапросы в Knex.

Каждый запрос возвращает экземпляр построителя запросов Knex, который мы называем псевдонимом .as.Так что их довольно легко построить постепенно:

const subquery1 = knex("foos").count("*").as("foocount");
const subquery2 = knex("bars").count("*").as("barcount");
knex.select(subquery1, subquery2).then(console.log);
...