전체 글 784

[Lv.3 / 프로그래머스 / SQL] 즐겨찾기가 가장 많은 식당 정보 출력하기

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 (MySQL) FOOD_TYPE별로 FAVORITES가 가장 높은 식당의 ID와 NAME을 함께 출력해야 한다. 필자는 FOOD_TYPE별 가장 높은 FAVORITES를 추린 뒤, WHERE절에서 비교하여 가져오는 방식으로 해결했다. Implicit Join SELECT A.FOOD_TYPE , REST_ID , REST_NAME , FAVORITES FROM REST_INFO AS A , ( SELECT FOOD_TYPE , MAX(FAVORITES) AS MAX_FAVORITES FROM REST_I..

[Lv.2 / 프로그래머스 / SQL] 자동차 평균 대여 기간 구하기

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 (MySQL) 대여 기간이 평균 7일 이상인 자동차의 ID와 그 평균 기간을 조회해야 한다. DATE 타입의 두 날짜의 차이를 구해야 하므로 DATEDIFF 함수를 사용했다. AVERAGE_DURATION이 7일 이상인 조건을 적어야 할 때, WHERE이 아닌 HAVING을 사용해야 함을 주의해야 한다. 관련 포스팅은 아래에 기재되어 있다. [SQL] Select절에 별칭(AS) 사용 후 Where절 Unknown Column 발생 이유 에러 메시지 SQL 오류 (1054): Unknown column ..

[Lv.1 / 프로그래머스 / SQL] 여러 기준으로 정렬하기

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 (MySQL) 이름은 오름차순으로, 만약 이름이 같다면 날짜를 내림차순으로 정렬하여 조회해야 한다. ORDER BY절에 여러 줄의 조건을 작성하면 먼저 적힌 것부터 순차적으로 여러 기준으로 정렬이 가능하다. SELECT ANIMAL_ID , NAME , DATETIME FROM ANIMAL_INS ORDER BY NAME , DATETIME DESC

[Lv.1 / 프로그래머스 / SQL] 상위 n개 레코드

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 (MySQL) 조회된 목록 중 제한된 개수만 취하고 싶을 경우, LIMIT을 사용하면 된다. 따라서 날짜를 오름차순 정렬한 뒤 LIMIT 1을 통해 가장 상위 케이스 하나만 출력할 수 있다. SELECT NAME FROM ANIMAL_INS ORDER BY DATETIME LIMIT 1

[Lv.2 / 프로그래머스 / SQL] 가격이 제일 비싼 식품의 정보 출력하기

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 (MySQL) 가장 가격이 비싼 항목을 하나 출력해야 한다. 다양한 풀이 방법이 있다. 정렬을 이용하여 가격 내림차순의 첫 번째 것을 고르는 것, 서브쿼리나 조인을 이용하는 것 등... 필자는 처음에 서브쿼리로 풀이했다. SUB QUERY SELECT PRODUCT_ID , PRODUCT_NAME , PRODUCT_CD , CATEGORY , PRICE FROM FOOD_PRODUCT WHERE PRICE = ( SELECT MAX(PRICE) FROM FOOD_PRODUCT ) 위의 풀이도 정답이지만,..

[Spring Security] 인가 프로세스 DB 연동 웹 계층 구현

스프링 시큐리티 인가 개요 DB 연동 권한 관리가 필요한 이유 Spring Security에서 사용자가 재정의하여 사용하는 SecurityConfig 설정 클래스를 통해 선언적 방식으로 인가 처리를 수행할 수 있다. 단, 이 방법은 하드코딩으로 진행되기 때문에 동적 권한 관리가 필요한 범용 서비스에서는 권장되지 않는다. 따라서 DB와 연동하여 자원 및 권한을 설정하고 제어함으로 동적 권한 관리가 가능하도록 해야 한다. 설정 클래스 소스에서 권한 관련 코드 모두 제거 ex) antMatcher(“/user”).hasRole(“USER”) 관리자 시스템 구축 회원 관리 – 권한 부여 권한 관리 – 권한 생성, 삭제 자원 관리 – 자원 생성, 삭제, 수정, 권한 매핑 권한 계층 구현 URL – Url 요청 시..

Dev/Spring 2023.02.19

[Lv.2 / 프로그래머스 / SQL] 동명 동물 수 찾기

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 (MySQL) 중복된 이름의 동물의 수를 조회해야 한다. 단, 중복되지 않은 것을 모두 제외해야 하고 이름이 NULL인 것을 조회하면 안 된다. 이름별로 묶어 세야 하므로 GROUP BY와 COUNT를 이용해야 하고, 그 COUNT된 컬럼의 수가 2이상인 조건을 걸어줘야 한다. 여기서, WHERE이 아닌 HAVING에 입력해야 하는데 WHERE에 조건을 입력하면 Unknown column 'COUNT' in 'where clause' 과 같은 오류가 발생할 것이다. 이 예외는 SELECT 절 이전에 WH..

[Lv.2 / 프로그래머스 / SQL] 고양이와 개는 몇 마리 있을까

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 (MySQL) GROUP BY 와 함께 쓸 수 있는 함수인 COUNT를 이용해 ANIMAL_TYPE별로 개수를 세야 한다. 단, COUNT를 사용할 경우 지정한 컬럼의 데이터가 NULL인 행은 제외하고 가져온다. 따라서 * 기호를 사용해 모든 행을 불러오거나, NULLABLE이 아닌 컬럼을 지정하도록 하자. SELECT ANIMAL_TYPE , COUNT(ANIMAL_ID) AS count FROM ANIMAL_INS GROUP BY ANIMAL_TYPE ORDER BY ANIMAL_TYPE

[Lv.1 / 프로그래머스 / SQL] 이름이 없는 동물의 아이디

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 이름이 NULL인 동물의 아이디를 조회해야 한다. 확인하고자 하는 컬럼 뒤에 IS NULL 을 사용함으로써 해당 컬럼의 값이 비어 있는지 확인할 수 있다. SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NULL

[Lv.2 / 프로그래머스 / SQL] 최솟값 구하기

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 주어진 테이블에서 DATETIME이 가장 먼저인 것을 조회해야 한다. MIN 함수를 통해 최솟값을 구할 수 있으며, 조회된 컬럼명은 끝에 AS 를 이용하여 '시간'으로 컬럼명을 변경할 수 있다. 문제에 기술된 것처럼 굳이 컬럼명을 바꾸지 않아도 정답처리는 된다. SELECT MIN(DATETIME) AS 시간 FROM ANIMAL_INS

반응형