SQL - 出现在特定类别的所有存储桶中的项目
SQL - item that appears in all buckets in Certain Category
我有这个table(table name 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 那些类型的行?
我试过 select distinct 或 count distinct with condition 但失败了。
select * from ch group by ID_A, ID_B having count(ditinct Category_A)=4;
我希望 table 像这样;
╔══════╦══════╦══════════╦══════════╗
║ 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 ║
╚══════╩══════╩══════════╩══════════╝
这可能有效
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
我有这个table(table name 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 那些类型的行? 我试过 select distinct 或 count distinct with condition 但失败了。
select * from ch group by ID_A, ID_B having count(ditinct Category_A)=4;
我希望 table 像这样;
╔══════╦══════╦══════════╦══════════╗
║ 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 ║
╚══════╩══════╩══════════╩══════════╝
这可能有效
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