개발새발

자주 헷갈리는 MySQL 문법 정리, SQL JOIN 후 Group by 된 칼럼 갯수 구하는 방법 본문

코딩테스트/SQL

자주 헷갈리는 MySQL 문법 정리, SQL JOIN 후 Group by 된 칼럼 갯수 구하는 방법

allkites 2024. 6. 20. 20:25

자주 헷갈리는 SQL 문법들을 정리해봤다. (내가 기억하기 위해 쓰는 글ㅎㅎ)

  • 소숫점 반올림 함수 Round()
  • group by에서 where 조건을 사용하기 위해서는 having count(*)
  • date의 경우 date_format(칼럼, ‘%y-%m-%d) 또는 year(칼럼) = ‘2024’ 
  • order by 후 상위 n 개 출력 limit n
  • 문자열자르기 left(칼럼, 숫자)
  • 중복제거 distinct 중복의 경우 select distinct 칼럼1, 칼럼2, .. 을 모두 만족해야 함

 

예시) Post 라는 테이블에 Comment를 남긴 사람의 수를 구하는 문제다.

여기에서 Post별 Comment를 남긴 distinct User Id의 갯수를 구하는 문제라서 우선 Post_id로 조인한 후,

해당 Post마다 User_id로 그룹화를 한 후 서로 다른 User_id를 구하면 된다.

단, 내가 작성한 포스트의 코멘트는 제외해야한다.

INSERT INTO `post` (`id`, `user_id`) VALUES (1, 1001); 
INSERT INTO `post` (`id`, `user_id`) VALUES (2, 1001); 
INSERT INTO `post` (`id`, `user_id`) VALUES (3, 1002); 
INSERT INTO `post` (`id`, `user_id`) VALUES (4, 1003); 

INSERT INTO `comment` (`id`, `post_id`, `user_id`) VALUES (6, 1, 1001); 
INSERT INTO `comment` (`id`, `post_id`, `user_id`) VALUES (7, 1, 1002);
INSERT INTO `comment` (`id`, `post_id`, `user_id`) VALUES (8, 2, 1003); 
INSERT INTO `comment` (`id`, `post_id`, `user_id`) VALUES (9, 3, 1003); 
INSERT INTO `comment` (`id`, `post_id`, `user_id`) VALUES (10, 3, 1003); 
INSERT INTO `comment` (`id`, `post_id`, `user_id`) VALUES (11, 4, 1001);
INSERT INTO `comment` (`id`, `post_id`, `user_id`) VALUES (12, 4, 1002); 

-- 1001번의 post 1번에 댓글을 단 사람의 수 구하기, 본인 제외
-- 1001 2, 1002 1, 1003 2
SELECT a.user_id, count(b.user_id) as cnt
  FROM post a
  join (select distinct user_id, post_id from comment) b 
  on a.id = b.post_id
  where a.user_id != b.user_id
  group by a.user_id
  order by a.user_id asc

 

Comments