Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 로컬포트번호
- 백준
- c#blob
- blob파일다운로드
- mysql
- 프로그래머스MYSQL
- 코딩테스트
- blob다운로드오류
- asp.net
- C#
- 프로그래머스SQL
- 파이썬백준
- BLOB
- sql
- blobcontainer
- 취업코데
- sql server 포트번호
- c# 엑셀추출
- blob파일업로드
- sql풀이
- queryasync
- 코테유형
- 코딩테스트유형
- 알고리즘
- 투포인터예제
- export to excel
- 파이썬
- frontend
- 코테
- 프로그래머스
Archives
- Today
- Total
개발새발
자주 헷갈리는 MySQL 문법 정리, SQL JOIN 후 Group by 된 칼럼 갯수 구하는 방법 본문
자주 헷갈리는 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
'코딩테스트 > SQL' 카테고리의 다른 글
[프로그래머스 SQL 고득점 kit 풀이] MySQL SUM, MAX, MIN (0) | 2021.07.13 |
---|---|
[프로그래머스 SQL 고득점 kit 풀이] MySQL String, Date (0) | 2021.07.13 |
[프로그래머스 SQL 고득점 kit 풀이] MySQL SELECT (0) | 2021.07.12 |
[프로그래머스 SQL 고득점 kit 풀이] MySQL JOIN (0) | 2021.07.08 |
[프로그래머스 SQL 고득점 kit 풀이] MySQL ISNULL (0) | 2021.07.08 |
Comments