programing

SQL: 주어진 모든 값을 가진 그룹만 선택하려면 어떻게 해야 합니까?

sourcejob 2022. 11. 4. 23:24
반응형

SQL: 주어진 모든 값을 가진 그룹만 선택하려면 어떻게 해야 합니까?

이런 테이블(join과 where를 사용하여 알게 된)이 주어졌습니다.

| post_id | comment_id |
|    1    |     100    |
|    1    |     101    |
|    1    |     102    |
| .  2 .  | .   100 .  |
| .  3 .  | .   101 .  |
| .  3 .  | .   102 .  |

1개 또는 복수의 코멘트 ID 리스트가 주어졌습니다.

(100, 101)

게시물에 지정된 comment_ids가 모두 포함되어 있지 않은 게시물만 찾습니다.


따라서 이 테이블과 (100,101)의 comment_id 목록에서는 post id(2,3)를 반환해야 합니다.post id 2와 3에는 모두 코멘트 100과 101이 없기 때문입니다.

(101)의 comment_id 목록에서는 post id (2)를 반환해야 합니다.

comment_id가 (103)인 경우 이러한 게시물에는 103(존재하지 않음)이 없기 때문에 post_id(1,2,3)를 반환해야 합니다.


편집:

이 코드로 comment_id를 1개만 입력해도 동작할 수 있었습니다.

select post_id
from table_name
group by post_id
having count(*) = sum( comment_id not in (100) )

Gordon의 답변에서 "not"을 추가했는데, 이러한 코멘트를 여러 개 사용할 때는 다음과 같습니다.

having count(*) = sum( comment_id not in (100, 102) )

그런 다음 모든 post_ids(1, 2, 3)를 되돌립니다.post_id(2,3)만 반환해야 합니다.Post_id 1에는 100과 102의 comment_ids가 모두 있으므로 쿼리에 포함할 수 없습니다.

복수의 코멘트 ID를 받아들이려면 어떻게 해야 하나요?

사용할 수 있습니다.group by그리고.having:

select post_id
from t
group by post_id
having count(*) = sum( comment_id in (2, 3) );

이것은 테이블에 중복이 없다고 가정합니다.가능한 경우:

having count(distinct comment_id) = count(distinct case when comment_id in (2, 3) then comment_id end)

편집:

제가 원문을 잘못 읽었나 봐요.댓글 달린 거 갖고 싶은 줄 알았는데원하는 것은 다음과 같습니다.

select post_id
from t
group by post_id
having 2 <> sum( comment_id in (2, 3) );

당신의 질의에 따라 각 게시물에는 최대 3개의 comment_id가 있어야 합니다.따라서 동일하지 않은 상태에서 찾으려는 문의는 다음과 같습니다.

        SELECT POST_ID FROM TABLE
           GROUP BY POST_ID HAVING 
       COUNT(Distinct COMMENT_ID) <3

언급URL : https://stackoverflow.com/questions/54913331/sql-how-do-you-only-select-the-groups-where-any-given-group-has-all-of-the-valu

반응형