특정 형질을 가지는 대장균 찾기 (AND 연산자, ROUND 함수)
https://school.programmers.co.kr/learn/courses/30/lessons/301646
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr



아 이걸 하려면 AND연산자에 대해 잘 알아야 함.
& (비트 AND 연산자) :
AND 연산은 두 비트가 모두 1일 때 결과가 1이 되고, 그렇지 않으면 0이 됨.
1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0
• &는 비트 연산자로, 두 숫자를 이진수로 변환한 뒤 각 비트를 비교하여 AND 연산을 수행.
8을 이진수로 표현하면 아래와 같음
1 (2³) + 0 (2²) + 0 (2¹) + 0 (2⁰)
그래서 8 & 2¹ 하게되면
1000 & 0010 = 0000
2가 없고, 1, 3 포함되어야 하니까,
(2 = 0010, 5 = 0101, GENOTYPE 이진수값이랑 대조해서 해당 자리에 1있으면 1 이상임)
즉, 조건이 이렇게 됨
GENOTYPE & 2 = 0
GENOTYPE & 5 > 0
정답 (컬럼에 별명(count) 안붙이니까, 계속 실패 뜸.)
SELECT COUNT(ID) count FROM ECOLI_DATA WHERE (GENOTYPE & 2 = 0) AND (GENOTYPE & 5 > 0)
추가로 찾은 함수
BIN() 함수 :
MySQL에서 숫자를 이진수 문자열로 변환하는 내장 함수
POWER(base, exponent) 함수 : 주어진 숫자의 거듭제곱(제곱)을 계산
(POWER(2, 3) = 2³ = 2 × 2 × 2)
평균 일일 대여 요금 구하기
https://school.programmers.co.kr/learn/courses/30/lessons/151136
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
SELECT ROUND(AVG(DAILY_FEE),0) AVERAGE_FEE FROM CAR_RENTAL_COMPANY_CAR WHERE CAR_TYPE='SUV';
ROUND(expression, decimal_places)
• expression: 계산할 값(예: 평균 값).
• decimal_places: 소수점 이하 자리수.
• 1이면 소수 첫 번째 자리까지 반올림.
• 0이면 정수로 반올림.
3월에 태어난 여성 회원 목록 출력하기
https://school.programmers.co.kr/learn/courses/30/lessons/131120
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
SELECT MEMBER_ID, MEMBER_NAME, GENDER, DATE_FORMAT(DATE_OF_BIRTH,'%Y-%m-%d') DATE_OF_BIRTH FROM MEMBER_PROFILE WHERE GENDER='W' AND MONTH(DATE_OF_BIRTH)=3 AND TLNO IS NOT NULL ORDER BY MEMBER_ID;
서울에 위치한 식당 목록 출력하기
https://school.programmers.co.kr/learn/courses/30/lessons/131118
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
SELECT I.REST_ID, I.REST_NAME, I.FOOD_TYPE, I.FAVORITES, I.ADDRESS, ROUND(AVG(R.REVIEW_SCORE),2) SCORE FROM REST_INFO I JOIN REST_REVIEW R ON I.REST_ID=R.REST_ID
WHERE I.ADDRESS LIKE '서울%'
GROUP BY I.REST_ID
ORDER BY SCORE DESC, FAVORITES DESC;
2025.01.23
흉부외과 또는 일반외과 의사 목록 출력하기
https://school.programmers.co.kr/learn/courses/30/lessons/132203
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
SELECT DR_NAME, DR_ID, MCDP_CD, DATE_FORMAT(HIRE_YMD,'%Y-%m-%d') HIRE_YMD
FROM DOCTOR
WHERE MCDP_CD = 'CS' OR MCDP_CD = 'GS'
ORDER BY HIRE_YMD DESC, DR_NAME;
재구매가 일어난 상품과 회원 리스트 구하기 (HAVING, GROUP BY절)
https://school.programmers.co.kr/learn/courses/30/lessons/131536
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
SELECT USER_ID, PRODUCT_ID FROM ONLINE_SALE
GROUP BY PRODUCT_ID, USER_ID
HAVING COUNT(PRODUCT_ID) > 1
ORDER BY USER_ID, PRODUCT_ID DESC;
역순 정렬하기
https://school.programmers.co.kr/learn/courses/30/lessons/59035
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
SELECT NAME, DATETIME FROM ANIMAL_INS ORDER BY ANIMAL_ID DESC;
아픈 동물 찾기
https://school.programmers.co.kr/learn/courses/30/lessons/59036
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS
WHERE INTAKE_CONDITION='Sick'
ORDER BY ANIMAL_ID;
어린 동물 찾기
https://school.programmers.co.kr/learn/courses/30/lessons/59037
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS
WHERE INTAKE_CONDITION<>'Aged'
ORDER BY ANIMAL_ID
동물의 아이디와 이름
https://school.programmers.co.kr/learn/courses/30/lessons/59403
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS ORDER BY ANIMAL_ID
여러 기준으로 정렬하기
https://school.programmers.co.kr/learn/courses/30/lessons/59404
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
SELECT ANIMAL_ID, NAME, DATETIME FROM ANIMAL_INS ORDER BY NAME, DATETIME DESC;
상위 n개 레코드
https://school.programmers.co.kr/learn/courses/30/lessons/59405
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
SELECT NAME FROM ANIMAL_INS ORDER BY DATETIME LIMIT 1;
조건에 맞는 회원수 구하기 (YEAR 함수)
https://school.programmers.co.kr/learn/courses/30/lessons/131535
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
SELECT COUNT(*) USERS FROM USER_INFO
WHERE (AGE BETWEEN 20 AND 29) AND YEAR(JOINED) = 2021;
과일로 만든 아이스크림 고르기
https://school.programmers.co.kr/learn/courses/30/lessons/133025
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
SELECT F.FLAVOR FROM FIRST_HALF F JOIN ICECREAM_INFO I ON F.FLAVOR=I.FLAVOR
WHERE F.TOTAL_ORDER > 3000 AND I.INGREDIENT_TYPE='fruit_based'
ORDER BY TOTAL_ORDER DESC;
가장 큰 물고기 10마리 구하기
https://school.programmers.co.kr/learn/courses/30/lessons/298517
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
SELECT ID, LENGTH FROM FISH_INFO
ORDER BY LENGTH DESC, ID LIMIT 10;
특정 물고기를 잡은 총 수 구하기
https://school.programmers.co.kr/learn/courses/30/lessons/298518
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
SELECT COUNT(I.FISH_TYPE) FISH_COUNT
FROM FISH_INFO I JOIN FISH_NAME_INFO N ON I.FISH_TYPE=N.FISH_TYPE
WHERE N.FISH_NAME='BASS' OR N.FISH_NAME='SNAPPER'
2025.01.24
강원도에 위치한 생산공장 목록 출력하기
https://school.programmers.co.kr/learn/courses/30/lessons/131112
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
SELECT FACTORY_ID, FACTORY_NAME, ADDRESS FROM FOOD_FACTORY
WHERE ADDRESS LIKE "%강원도%"
ORDER BY FACTORY_ID
인기있는 아이스크림
https://school.programmers.co.kr/learn/courses/30/lessons/133024
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
SELECT FLAVOR FROM FIRST_HALF
ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID;
12세 이하인 여자 환자 목록 출력하기
https://school.programmers.co.kr/learn/courses/30/lessons/132201
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
SELECT PT_NAME, PT_NO, GEND_CD, AGE, IF(TLNO IS NULL,"NONE",TLNO) TLNO FROM PATIENT
WHERE AGE <= 12 AND GEND_CD = 'W'
ORDER BY AGE DESC, PT_NAME;
조건에 맞는 도서 리스트 출력하기
https://school.programmers.co.kr/learn/courses/30/lessons/144853
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
SELECT BOOK_ID, DATE_FORMAT(PUBLISHED_DATE,'%Y-%m-%d') PUBLISHED_DATE FROM BOOK
WHERE YEAR(PUBLISHED_DATE)=2021 AND CATEGORY='인문'
ORDER BY PUBLISHED_DATE;
조건에 부합하는 중고거래 댓글 조회하기
https://school.programmers.co.kr/learn/courses/30/lessons/164673
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
SELECT B.TITLE, B.BOARD_ID, R.REPLY_ID, R.WRITER_ID, R.CONTENTS, DATE_FORMAT(R.CREATED_DATE,'%Y-%m-%d') CREATED_DATE
FROM USED_GOODS_BOARD B JOIN USED_GOODS_REPLY R ON B.BOARD_ID=R.BOARD_ID
WHERE YEAR(B.CREATED_DATE)=2022 AND MONTH(B.CREATED_DATE)=10
ORDER BY R.CREATED_DATE, B.TITLE;
SELECT B.TITLE, B.BOARD_ID, R.REPLY_ID, R.WRITER_ID, R.CONTENTS, DATE_FORMAT(R.CREATED_DATE,'%Y-%m-%d') CREATED_DATE
FROM USED_GOODS_BOARD B JOIN USED_GOODS_REPLY R ON B.BOARD_ID=R.BOARD_ID
WHERE DATE_FORMAT(B.CREATED_DATE, '%Y-%m') = '2022-10'
ORDER BY R.CREATED_DATE, B.TITLE;
모든 레코드 조회하기
https://school.programmers.co.kr/learn/courses/30/lessons/59034
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
SELECT * FROM ANIMAL_INS
ORDER BY ANIMAL_ID
오프라인/온라인 판매 데이터 통합하기
https://school.programmers.co.kr/learn/courses/30/lessons/131537
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
SELECT DATE_FORMAT(SALES_DATE,'%Y-%m-%d') SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM (
SELECT SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
WHERE DATE_FORMAT(SALES_DATE,'%Y-%m')='2022-03'
UNION ALL
SELECT SALES_DATE, PRODUCT_ID, NULL AS USER_ID, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE YEAR(SALES_DATE) = 2022 AND MONTH(SALES_DATE) = 3
) AS combined_sales
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID;
UNION ALL과 JOIN의 차이
UNION ALL
• **UNION ALL**은 **두 개 이상의 테이블의 결과를 수직으로 결합(병합)**합니다.
• 행 단위로 데이터를 결합합니다.
• UNION: 중복 제거.
• UNION ALL: 중복 포함.
JOIN
• 테이블 간의 **공통된 키(컬럼)**를 사용하여 데이터를 결합합니다.
• 수평적으로 데이터를 병합합니다.
종류:
1. INNER JOIN:
• 공통 키가 일치하는 데이터만 반환.
2. LEFT JOIN:
• 왼쪽 테이블의 모든 데이터 + 오른쪽 테이블에서 매칭된 데이터.
3. RIGHT JOIN:
• 오른쪽 테이블의 모든 데이터 + 왼쪽 테이블에서 매칭된 데이터.
4. FULL JOIN:
• 양쪽 테이블의 모든 데이터.
업그레이드 된 아이템 구하기
https://school.programmers.co.kr/learn/courses/30/lessons/273711
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
SELECT I.ITEM_ID, I.ITEM_NAME, I.RARITY
FROM ITEM_INFO I JOIN ITEM_TREE T ON I.ITEM_ID=T.ITEM_ID
WHERE T.PARENT_ITEM_ID IN(
SELECT ITEM_ID
FROM ITEM_INFO
WHERE RARITY='RARE'
)
ORDER BY I.ITEM_ID DESC;
이거 좀 어려웠음.
T.PARENT_ITEM_ID가 조건 걸린 ITEM_ID 값에 대해서만 필터링 거는 방식으로 해결
Python 개발자 찾기 (IN 조건)
https://school.programmers.co.kr/learn/courses/30/lessons/276013
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
SELECT ID, EMAIL, FIRST_NAME, LAST_NAME FROM DEVELOPER_INFOS
WHERE 'Python' IN (SKILL_1, SKILL_2, SKILL_3)
ORDER BY ID;
조건에 맞는 개발자 찾기(조건기반 JOIN, GROUP BY 이해하기)
https://school.programmers.co.kr/learn/courses/30/lessons/276034
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
SELECT D.ID, D.EMAIL, D.FIRST_NAME, D.LAST_NAME
FROM DEVELOPERS D JOIN SKILLCODES S ON (D.SKILL_CODE & S.CODE) > 0
WHERE S.NAME IN ('Python', 'C#')
GROUP BY D.ID, D.EMAIL, D.FIRST_NAME, D.LAST_NAME
ORDER BY D.ID;
코드 설명
JOIN조건 ON 설명 :
(D.SKILL_CODE & S.CODE) > 0
110010000 400 <- DEVELERS의 SKILL_CODE
100000000 256 <- 스킬 코드 값
100000000 <- 비트연산 시 결과 값 : 해당 스킬 보유를 의미함으로 >0 설정 하면 됨
GROUP BY를 써야하는 이유
ID, NAME 등 중복 제거를 위해 사용.
그런데 말입니다.
GROUP BY를 사용하면 SELECT절에 컬럼은 모두 GROUP BY로 그룹화된 컬럼을 사용하거나, 집계함수(SUM, COUNT, MAX 등)를 적용해야 함
대장균의 크기에 따라 분류하기 2 (WITH)
https://school.programmers.co.kr/learn/courses/30/lessons/301649
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
-- 코드를 작성해주세요
WITH Ranked AS (
SELECT ID, SIZE_OF_COLONY,
NTILE(4) OVER (ORDER BY SIZE_OF_COLONY DESC) AS RANK_GROUP
FROM ECOLI_DATA
)
SELECT ID,
CASE
WHEN RANK_GROUP = 1 THEN 'CRITICAL'
WHEN RANK_GROUP = 2 THEN 'HIGH'
WHEN RANK_GROUP = 3 THEN 'MEDIUM'
ELSE 'LOW'
END AS COLONY_NAME
FROM Ranked
ORDER BY ID;
특정 세대의 대장균 찾기
https://school.programmers.co.kr/learn/courses/30/lessons/301650
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
SELECT D.ID
FROM ECOLI_DATA D
INNER JOIN (
SELECT A.ID
FROM ECOLI_DATA A
INNER JOIN (
SELECT ID
FROM ECOLI_DATA
WHERE PARENT_ID IS NULL
) AS B ON A.PARENT_ID = B.ID
) AS C ON D.PARENT_ID = C.ID
ORDER BY D.ID ASC;
멸종위기의 대장균 찾기
https://school.programmers.co.kr/learn/courses/30/lessons/301651
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
'코딩 > SQL' 카테고리의 다른 글
MySQL Community Server & Workbench 알아보기 (0) | 2025.02.11 |
---|---|
SQL 복습 - 전체적인 SQL 플로우 (0) | 2025.01.24 |
SQL - Day3 (0) | 2025.01.16 |
SQL 문제 (0) | 2025.01.15 |
SQL - Day2 (0) | 2025.01.15 |