SQL - элемент, который появляется во всех сегментах в определенной категории - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть эта таблица (имя таблицы CH);

╔══════╦══════╦══════════╦══════════╗
║ ID_A ║ ID_B ║Category_A║Category_B║
╠══════╬══════╬══════════╬══════════╣
║   1  ║   1  ║    1     ║     5    ║
║   1  ║   2  ║    1     ║     5    ║
║   1  ║   3  ║    1     ║     5    ║
║   1  ║   1  ║    2     ║     5    ║
║   1  ║   3  ║    2     ║     5    ║
║   1  ║   1  ║    3     ║     5    ║
║   1  ║   2  ║    3     ║     5    ║
║   2  ║   1  ║    1     ║     4    ║
║   2  ║   2  ║    1     ║     3    ║
║   2  ║   2  ║    2     ║     2    ║
║   2  ║   2  ║    3     ║     1    ║
╚══════╩══════╩══════════╩══════════╝

ID_A = 1 & ID_B = 1 появляется все в Category_A (= 1,2,3), а также ID_A = 2 & ID_B =2 появляется все в Category_A (= 1,2,3)

Есть ли в любом случае, чтобы выбрать эти типы строк?Я пытался выбрать разные или подсчитать разные с условием, но не смог.

select * from ch group by ID_A, ID_B having count(ditinct Category_A)=4; 

Я ожидаю, что таблица, как это;

╔══════╦══════╦══════════╦══════════╗
║ ID_A ║ ID_B ║Category_A║Category_B║
╠══════╬══════╬══════════╬══════════╣
║   1  ║   1  ║    1     ║     5    ║
║   1  ║   1  ║    2     ║     5    ║
║   1  ║   1  ║    3     ║     5    ║
║   2  ║   2  ║    1     ║     3    ║
║   2  ║   2  ║    2     ║     2    ║
║   2  ║   2  ║    3     ║     1    ║
╚══════╩══════╩══════════╩══════════╝

1 Ответ

0 голосов
/ 28 февраля 2019

Это может сработать

SELECT *
FROM (
  SELECT ID_A, ID_B, COUNT(DISTINCT Category_A) as COUNT_CAT_A
  FROM CH
  GROUP BY ID_A, ID_B 
) X
WHERE COUNT_CAT_A = 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...