Количество элементов в одном ряду, но не в другом - PullRequest
1 голос
/ 22 марта 2019

У меня есть таблица доступа, которая содержит в одном столбце список групп, а затем в другом столбце список продуктов. Я хотел бы запустить отчет, чтобы показать, сколько групп во всех продуктах, сколько групп, по крайней мере, 1 из продуктов. У меня целых 6 товаров в данной таблице и более 5000 уникальных групп.
Ниже приведен пример того, что я ищу:

Таблица:

Group | Product  
AAAA  | 123456  
AAAA  | 234578  
AAAA  | 456789  
AAAA  | 789012  
BBBB  | 123456  
BBBB  | 234578  
BBBB  | 456789  
CCCC  | 123456  
CCCC  | 234578  
CCCC  | 456789  
CCCC  | 789012  

Ожидаемые результаты:

Product 123456 and 234578 and 456789 and 789012 has 2 groups  
Product 123456 or 234578 or 456789 or 789012 or has 3 groups  

Я пробовал приведенный ниже запрос, но это только для случаев, когда это продукт или другой продукт, а не для обоих. Я ищу, когда группа находится в продукте x и продукте y и продукте z, но не в продукте a.

  SELECT group  
  FROM GroupProducts  
  WHERE   
         product in (’123456’,’2345678’,’456789’)  
         and product not in (’789012’)

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Я хотел бы запустить отчет, чтобы показать, сколько групп во всех продуктах

При условии отсутствия повторяющихся записей следующий запрос должен вернуть набор всех групп, связанных со всеми продуктами в наборе данных:

select t.group from YourTable t group by t.group
having count(t.group) = 
(
    select count(*) from (select distinct u.product from YourTable u)
)

Вы можете сосчитать эти группы, просто заключив вышеупомянутый запрос select count(*):

select count(*) from
(
    select t.group from YourTable t group by t.group
    having count(t.group) = 
    (
        select count(*) from (select distinct u.product from YourTable u)
    )
)

сколько групп по крайней мере 1 из продуктов

Это значительно проще, так как вы можете просто выбрать количество отдельных групп в наборе данных:

select distinct t.group from YourTable t

Который затем можно считать таким же образом, как описано ранее:

select count(*) from 
(
    select distinct t.group from YourTable t
)

Во всех приведенных выше примерах замените все экземпляры YourTable на имя вашей таблицы.

0 голосов
/ 22 марта 2019

Попробуйте использовать Count и сгруппировать по Product:

SELECT Count(group), Product
FROM GroupProducts
WHERE
product in ('123456','2345678','456789')
and product not in ('789012')
GROUP BY product

Предполагается, что в вашей таблице нет дубликатов, иначе вам придется сначала отфильтровать их

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