728x90
반응형
문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/164670
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 핵심
- COUNT 집계함수 - group by된 행의 개수를 세고 싶을 때..순간 떠올리지 못했다.
- CONCAT
- CONCAT('행복한', '라이언')의 결과는 '행복한라이언'으로 띄어쓰기 없이 출력된다. 출력 양식을 잘 봐서 띄어쓰기에도 주의하도록한다.
- SUBSTRING
- 전화번호의 양식 'xxx-xxxx-xxxx'을 만들기 위해서 사용한 함수이다.
- SUBSTRING(STR, start_position(인덱스0은 없으며 1부터 시작함), length(잘라낼 문자열의 길이, 없으면 시작부터 끝까지)
- CHARINDEX
- CHARINDEX( 찾고자하는 문자열, 검색 대상)
- CHARINDEX('행복한 라이언', '라이언') -- 5
- CHARINDEX는 발견되는 첫 번째 위치를 반환함!!
2. 코드(MySQL)
-- 코드를 입력하세요
# 게시글 3건 이상 등록한 사용자의 id, 닉네임, 전체주소, 전화번호
# 전체주소: 시/명/상세주소
# 전화번호 xxx-xxxx-xxx
# 회원id기준 내림차순
with temp as (
select WRITER_ID, count(*) AS count
from USED_GOODS_BOARD
group by WRITER_ID
having count >= 3
)
select U.USER_ID,
U.NICKNAME,
concat(U.CITY,
' ',
U.STREET_ADDRESS1,
' ',
U.STREET_ADDRESS2) as 전체주소,
concat(substring(U.TLNO, 1, 3),
'-',
substring(U.TLNO, 4, 4),
'-',
substring(U.TLNO, 8)) as 전화번호
from temp T
inner join USED_GOODS_USER U on T.WRITER_ID = U.USER_ID
order by U.USER_ID desc;
3. 활용예제
1. 성과 이름 분할
SELECT
SUBSTRING(full_name, 1, CHARINDEX(' ', full_name) - 1) AS first_name,
SUBSTRING(full_name, CHARINDEX(' ', full_name) + 1, LEN(full_name)) AS last_name
FROM
users;
2. 전화번호의 서식 변경
SELECT
CONCAT(
SUBSTRING(phone_number, 1, 3),
'-',
SUBSTRING(phone_number, 4, 4),
'-',
SUBSTRING(phone_number, 8)
) AS formatted_phone_number
FROM
contacts;
3. 패턴일치
SELECT
SUBSTRING(url, CHARINDEX('//', url) + 2, LEN(url)) AS domain
FROM
websites;
# https://www.example.com
# www.example.com
# charindex 사용
SELECT CHARINDEX('world', 'Hello world'); -- 7
728x90
반응형
'PS > SQL' 카테고리의 다른 글
[SQL] 자동차 대여 기록 별 대여 금액 구하기 (0) | 2024.02.15 |
---|---|
[SQL] 우유와 요거트가 담긴 장바구니 (0) | 2024.02.12 |
[SQL] 자동차 평균 대여 기간 구하기 (0) | 2024.02.12 |
[SQL] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (0) | 2024.02.11 |
[SQL] 5월 식품들의 총매출 조회하기 (0) | 2024.02.11 |