Как посчитать общее количество записей после объединения трех таблиц в postgresql? - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть запрос, который дает мне всего 12408 записей после выполнения, но я хочу, чтобы это дало мне общее количество записей в виде столбца count

select c.complaint_id, c.server_time, c.completion_date, c.road_id, c.photo, c.dept_code, c.dist_code, c.eng_userid, c.feedback_type, c.status, p.dist_name, p.road_name, p.road_dept, e.display_name, e.mobile из жалоб от c INNERПРИСОЕДИНЯЙТЕСЬ к pwd_roads как p ON p.road_id = c.road_id INNER JOIN enc_details как e ON CAST (e.enc_code как INTEGER) = p.enccode, где c.complaint_id = c.parent_complaint_id и c.dept_code = 'PWDBnR' и c.servertimeмежду «2018-09-03» и «2018-12-19»

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Вы можете решить эту проблему, используя оконные функции.Например, если вы хотите, чтобы ваши первые столбцы были подсчетом общего количества строк, выполненных оператором SELECT:

select count(1) over(range between unbounded preceding and unbounded following) as total_row_count
 , c.complaint_id,c.server_time,c.completion_date,c.road_id,c.photo,c.dept_code,c.dist_code,c.eng_userid,c.feedback_type,c.status,p.dist_name,p.road_name,p.road_dept,e.display_name,e.mobile from complaints as c INNER JOIN pwd_roads as p ON p.road_id=c.road_id INNER JOIN enc_details as e ON CAST(e.enc_code as INTEGER) = p.enccode where c.complaint_id=c.parent_complaint_id and c.dept_code='PWDBnR' and c.server_time between '2018-09-03' and '2018-12-19'

Обратите внимание, что оконная функция вычисляется перед предложением LIMIT, если оноиспользуется, поэтому, если вы добавите LIMIT 100 к запросу, он может дать число строк больше 100, даже если будет возвращено максимум 100 строк.

0 голосов
/ 28 декабря 2018

Самый простой, но не очень элегантный способ сделать это:

select count(*)
from
( 
select c.complaint_id,c.server_time,c.completion_date,c.road_id,c.photo,c.dept_code,c.dist_code,c.eng_userid,c.feedback_type,c.status,p.dist_name,p.road_name,p.road_dept,e.display_name,e.mobile from complaints as c INNER JOIN pwd_roads as p ON p.road_id=c.road_id INNER JOIN enc_details as e ON CAST(e.enc_code as INTEGER) = p.enccode where c.complaint_id=c.parent_complaint_id and c.dept_code='PWDBnR' and c.server_time between '2018-09-03' and '2018-12-19'
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...