Группировать по определенному количеству столбцов, но исключить их в предложении select - PullRequest
0 голосов
/ 05 апреля 2019

Я хотел бы создать несколько сводных статистических данных и реализовать управляющую структуру в моих данных через Postgresql. Для чего я использую группу по. Проблема в том, что я не хотел бы отображать столбец в предложении «Select», но предложение group by вынуждает меня также использовать этот столбец

Я уже пытался использовать приведенный ниже код, но, к сожалению, я не хочу группировать по 'Valuenum'. Однако я хотел бы использовать этот столбец для создания нового столбца (в пределах диапазона), как показано в запросе ниже. Мои фактические данные выглядят так, как показано ниже. Обратите внимание, что это только образец. Subject_ids может повторяться с разными hadm_ids

enter image description here

select subject_id,hadm_id,count(*) as "Total no of records",
         case 
             when valuenum between 80 and 110 then 1
             else 0
             end as "within_range"
         from labevents where itemid in ('50809','50931','51529') and 
hadm_id is not null 
         group by subject_id,hadm_id,within_range
         order by subject_id,hadm_id

Я ожидаю, что результат будет похож на каждого субъекта, сгруппированного по их hadm_id и количеству записей (общее количество записей в пределах диапазона) для каждого пациента и их соответствующих hadm_ids

enter image description here

1 Ответ

0 голосов
/ 05 апреля 2019

вы не можете использовать псевдоним в группе, так как вы должны использовать его в группе или использовать подзапрос или cte

select subject_id,hadm_id,count(*) as "Total no of records",
         case 
             when valuenum between 80 and 110 then 1
             else 0
             end as "within_range"
         from labevents where itemid in ('50809','50931','51529') and 
hadm_id is not null 
         group by subject_id,hadm_id,case 
             when valuenum between 80 and 110 then 1
             else 0
             end
         order by subject_id,hadm_id

вот версия вашего кода

with cte as
(
select subject_id,hadm_id,case 
                 when valuenum between 80 and 110 then 1
                 else 0
                 end as "within_range"
             from labevents where itemid in ('50809','50931','51529') and 
    hadm_id is not null 


) select subject_id,hadm_id,within_range,count(*) as cnt
  from cte group by subject_id,hadm_id,within_range
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...