MAX 함수와 다른 컬럼들을 함께 조회하게 되면 엉뚱한 값이 조회된다. (내가 저질러버린 실수...) -- 틀린 예시 SELECT 컬럼1, MAX(컬럼2) FROM 테이블; 그래서 MAX 함수와 함께 다른 컬럼들을 조회할 때는 다른 방법으로 조회해야 한다. 1) 서브 쿼리 SELECT 컬럼1, 컬럼2 FROM 테이블명 WHERE 컬럼2 = (SELECT MAX(컬럼2) FROM 테이블명) 2) ORDER BY와 LIMIT 사용하기 SELECT 컬럼1, 컬럼2 FROM 테이블명 ORDER BY 컬럼2 DESC LIMIT 1 → 단, MAX 함수를 사용하면 MAX()에 해당되는 레코드를 모두 조회하지만 ORDER BY와 LIMIT을 사용하면 제한한 수만큼의 레코드를 조회한다. Ref. 1. 프로그래머스 게시..
가장 최근 날짜를 조회하기 위해 쿼리를 짰었다. 나는 날짜 컬럼을 내림차순으로 정렬하고 처음 것을 조회했었다. SELECT {날짜 컬럼} FROM {테이블명} ORDER BY {날짜 컬럼} DESC LIMIT 1; 다른 사람들의 쿼리를 통해 MAX() 함수를 쓸 수 있다는 것을 알게 되었다. MAX() 함수를 사용하면 훨씬 간결하게 짤 수 있다. 가장 최근 날짜 조회 SELECT MAX({날짜 컬럼}) FROM {테이블명}; 가장 옛날 날짜 조회 SELECT MIN({날짜 컬럼}) FROM {테이블명}; Ref. 1. https://stackoverflow.com/questions/426731/min-max-vs-order-by-and-limit * 잘못된 부분에 대해 댓글 남겨주시면 감사하겠습니다! 😀
NULL은 비교 연산자를 사용할 수 없다. NULL을 조회하기 위해서는 IS NULL 또는 IS NOT NULL을 사용해야 한다. -- NULL 조회 SELECT COL1 FROM TABLE WHERE COL2 IS NULL; -- NULL 외 조회 SELECT COL1 FROM TABLE WHERE COL2 IS NOT NULL; Ref. 1. https://gent.tistory.com/281 2. https://baekh-93.tistory.com/83 * 잘못된 부분에 대해 댓글 남겨주시면 감사하겠습니다! 😀
이 게시글은 얄팍한 코딩사전님의 '🔗 왕초보용! 갖고 노는 MySQL 데이터베이스 강좌'를 정리한 글입니다. 함수 숫자 관련 함수들 함수 설명 ROUND 반올림 CEIL 올림 FLOOR 내림 SELECT ROUND(0.5), CEIL(0.2), FLOOR(0.7); SELECT Price, ROUND(price), CEIL(price), FLOOR(price) FROM Products; 함수 설명 ABS 절대값 SELECT ABS(-2), ABS(1), ABS(2 - 5); 함수 설명 GREATEST {괄호 안에서} 가장 큰 값 LEAST {괄호 안에서} 가장 작은 값 SELECT GREATEST(1, 2, 100), LEAST(-1, 5, 10); 그룹 함수 - 조건에 따라 집계된 값을 가져온다. 함수..
성공 | 시도 3번 🔗 [백준] 1065번 : 한수 1065 : [브루트포스 알고리즘] 한수(py) 문제 설명 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오. 문제 분석 - 숫자가 백의 자리 이상일 때 등차수열인지 확인한다. 입력 첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다. 출력 첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다. 입력과 출력 예시 입력 출력 110 99 1 1 210 105 1000 144 500 119 내 소스 n = input() cnt = 0 ..
성공 | 시도 2번 🔗 [백준] 4673번 : 셀프 넘버 4673 : [브루트포스 알고리즘] 셀프 넘버(py) 문제 설명 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다. 예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다. 이런식으로 다음과 같은 수열을 만들 수 있다. 33, 39, 51..
map (function, iterable, * iterables) - iterable의 모든 항목에 함수를 적용하여 결과를 산출하는 iterator를 반환한다. 추가 iterables 인수가 전달되면 function은 많은 인수를 가져와야 하며 모든 iterables의 항목에 병렬로 적용된다. 반복 가능한 항목이 여러 개인 경우, 가장 짧은 반복 가능한 항목이 소진되면 반복자가 중지된다. [예시1] 문자열을 각 정수로 변환하여 리스트로 만들기 for문으로 정수 리스트 생성 n = "12345" array = [] for i in n: array.append(int(i)) print(array) # 출력 : [1, 2, 3, 4, 5] map으로 정수 리스트 생성 n = "12345" array = li..
요즘 코딩 테스트를 풀면서 가끔씩 하는 실수가 생겼다. 그런데 매번 에러 메세지를 볼 때마다 뭐가 잘못 되었는지 몰라서 한참을 고민하고 소스를 들여다보곤 한다. '저번에도 봤었던 에러 메세지였는데 그때 어디를 고쳤더라...?'의 무한굴레에 빠지곤 했다... 에러 메세지는 map 타입을 인덱싱할 수 없다는 뜻인데 매번 어느 부분이 문제였는지 살펴보느라 애를 먹었다. TypeError: 'map' object is not subscriptable 아래 소스와 같이 입력 값을 리스트에 담으려고 했을 때 이와 같은 에러가 발생한다면... n, m = map(int, input().split()) lst = [] for _ in range(n): lst.append(map(int, input().split()))..
한 개의 입력 데이터 받기 # 문자열 n = input() # 정수 n = int(input()) 여러 입력 데이터를 리스트로 변환 1) 데이터들이 한 칸 띄어쓰기가 되어있는 경우 map() : 리스트의 요소를 지정된 함수로 처리해주는 함수이다. # 문자열 n = list(input().split()) # 입력 : a b c d print(n) # 출력 : ['a', 'b', 'c', 'd'] # 정수 n = list(map(int,input().split())) # 입력 : 1 2 3 4 print(n) # 출력 : [1, 2, 3, 4] 2) 데이터들이 붙어있는 경우 문자열을 list로 형변환하면 각 문자가 원소가 된다. # 문자열 n = list(input()) # 입력 : abcd print(n)..
리스트 컴프리헨션 - 리스트를 초기화하는 방법 중 하나이다. - 리스트 컴프리헨션을 이용하여 대괄호([]) 안에 조건문과 반복문을 넣는 방식으로 리스트를 초기화할 수 있다. - 예) 2단 일반적인 코드 n = [] for i in range(1, 10): n.append(2 * i) print(n) # [2, 4, 6, 8, 10, 12, 14, 16, 18] 리스트 컴프리헨션 n = [2 * i for i in range(1,10)] print(n) # [2, 4, 6, 8, 10, 12, 14, 16, 18] 조건문을 사용한 리스트 컴프리헨션 - if 키워드는 for문 다음에 위치해야 한다. - 예) 홀수만 포함하는 리스트 n = [i for i in range(15) if i % 2 == 1] pr..