Выбор строк на основе отдельного значения одного столбца (на группу) в Postgres - PullRequest
0 голосов
/ 10 июля 2020

У меня есть следующая таблица в PostgreSQL 11.

col1    col2                          col3          col4
3876    Dexamethasone                 Dexamethasone A01AC
3876    Dexamethasone                 Dexamethasone C05AA
3876    Dexamethasone                 Dexamethasone D07AB
3924    Dexamethasone                 Dexamethasone A01AD
3924    Dexamethasone                 Dexamethasone C05AB
3925    Dexamethasone sulphate        Dexamethasone A01AC
3925    Dexamethasone sulphate        Dexamethasone C05AA

Я хотел бы получить строки с различными значениями col1, col2, col3 и агрегировать col4 и взять первое значение col1, если col1 , col2, col3 идентичны.

Желаемый результат:

col1    col2                    col3            col4
3876    Dexamethasone           Dexamethasone   A01AC | C05AA | D07AB | A01AD | C05AB
3925    Dexamethasone sulphate  Dexamethasone   A01AC | C05AA

Я пробовал выполнить следующий запрос.

select distinct on (col1, col2, col3) 
        col1, 
        col2, 
        col3, 
        string_agg(col4, ',') 
from table
where col2 ilike '%dexamethasone%' and col1 = 'Dexamethasone'
group by col1, col2, col3;

Как я могу ограничить вывод, чтобы получить его значение col1 на col2, col3 .. например. выбор значения col1: 3876 и исключение 3924.

1 Ответ

0 голосов
/ 10 июля 2020

Вы можете попробовать что-то вроде этого

select min(col1) as col1 , 
                    col2, 
                    col3, 
                    string_agg(col4, ',') 
               from table 
               where col2 like '%dexamethasone%' 
                        and col1 = 'Dexamethasone' 
               group by col2, col3;

попробуйте прочитать group by clause в postgres.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...