Dev's

[Dev's] SQL, group by로 묶고, 특정 컬럼에서 특정항목 포함된 그룹 빼기

rookas89 2022. 3. 16. 09:38
728x90
순번 이름 파일명
0 a a01.mp4
1 a a02.html
2 a a03.html
3 a a04.mp4
4 a a05.mp4
5 a a06.mp4
6 a a07.mp4
7 b a08.html
8 b a09.html
9 b a10.html
10 c a11.mp4
11 c a12.mp4
12 c a13.mp4
13 c a14.mp4

위 데이터에서 group by로 a,b,c를 묶고, 파일명에서 mp4가 포함된 항목을 빼버리고

순수 html로 이뤄진 b만 나오게 하는 쿼리

 

select name 
from temp
group by name
having sum(filename REGEXP 'mp4$') = 0

PostgreSQL 에서는

 

select name 
from temp
group by name
having sum(case when filename like '%.mp4' then 1 else 0 end) = 0;​

 

이런식으로 고쳐 사용했다.

group by로 이름을 a,b,c로 묶은 다음, sum으로 filename에 mp4가 들어간 항목들만 합계를 낸다.

그럼 mp4가 들어가지 않은 그룹 항목들은 sum 값이 0이 되므로, 결과적으로 순수하게 html만 있는 항목만

출력되게 된다.

728x90