Получить запись, в которой значение столбца существует только в определенной группе в Postgresql - PullRequest
0 голосов
/ 01 июля 2018

мой Postgresql TABLE выглядит,

CREATE TABLE foo(man_id, subgroup, power, grp)
AS VALUES
    (1, 'Sub_A',  4, 'Group_A'),
    (2, 'Sub_B', -1, 'Group_A'),
    (3, 'Sub_A',  5, 'Group_A'),
    (4, 'Sub_B',  1, 'Group_A'),
    (5, 'Sub_B',  6, 'Group_B'),
    (6, 'Sub_B',  2, 'Group_B'),
    (7, 'Sub_C',  2, 'Group_B');
    (8, 'Sub_B',  2, 'Group_C');

У нас есть четыре столбца man_id, subgroup, power, grp. Я хочу получить записи, в которых subgroup существует только в одном grp. Здесь вы можете найти Sub_A subgroup только в Group_A grp. Итак, мой ожидаемый результат должен быть

1, Sub_A,  4, Group_A
3, Sub_A,  5, Group_A

Каков рекомендуемый способ достижения этого?

Также ожидается решение MySQL.

Ответы [ 3 ]

0 голосов
/ 01 июля 2018

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

select subgroup, max(grp) as grp
from foo f
group by subgroup
having min(grp) = max(grp);
0 голосов
/ 01 июля 2018

Ниже запрос даст желаемый результат.

 with foo(man_id, subgroup, power, grp) as (
    select * from
    (
    VALUES
    (1, 'Sub_A',  4, 'Group_A'),
    (2, 'Sub_B', -1, 'Group_A'),
    (3, 'Sub_A',  5, 'Group_A'),
    (4, 'Sub_B',  1, 'Group_A'),
    (5, 'Sub_B',  6, 'Group_B'),
    (6, 'Sub_B',  2, 'Group_B'),
    (7, 'Sub_C',  2, 'Group_B'),
    (8, 'Sub_B',  2, 'Group_C')
    ) as x(man_id, subgroup, power, grp)
),res (subgroup) as (
   select
     subgroup
   from foo
   group by subgroup
   having count(distinct grp)=1
)
select f.* from foo f join res using(subgroup)


0 голосов
/ 01 июля 2018

Я думаю, вы можете использовать not exists:

select f.*
from foo f
where not exists (select 1
                  from foo f2
                  where f2.subgroup = f.subgroup and
                        f2.grp <> f.grp
                 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...