Data Engineering/SQL
-
프로그래머스 SQL TEST - 입양 시각 구하기(2)Data Engineering/SQL 2022. 4. 12. 01:13
최근 코딩 테스트 문제를 이것 저것 풀다가 생각보다 MYSQL 문법이 PostgreSQL과 다르다는 것을 알게 되었다.. (MySQL에 없는 기능이라서 찾다가 시간 다 간적도 있음..) 이 문제는 조금 복잡하게 푼 것 같아서 기록해두고 다른 풀이 방법이 있으면 수정하려고 포스팅 한다. (항상 SQL공부하면서 느끼는 건데 효율적인(?) 코드를 짜고 테스트하는 방법을 잘 모르겠다) 문제 ANIMAL_OUTS테이블에서 시간대별로 입양보낸 횟수를 count해서 출력하면 되는데 테이블에 없는 시간도 만들어야한다. 예를 들어 테이블에는 7시 1건, 8시 2건만 있으면 출력되어야하는 결과는 나머지 시간은 0회, 7시 1회, 8시 2회로 표시한 테이블. 풀이 방법 1. Datetime에서 시간만 추출하기 위해 SUBS..
-
몫과 나머지 구하기Data Engineering/SQL 2021. 8. 9. 00:04
몫은 FLOOR 함수, 나머지는 MOD 또는 REMAINDER함수로 구할 수 있다. 어떤 DB에서는 %도 사용 가능한 것 같긴 한데.. Oracle이 표준이니까 일단 함수로 공부하는 것이 좋을 듯 하다. - Oracle에서는 %연산자가 없다 - MSSQL에는 %연산자가 사용 가능하다고 한다 MOD함수와 REMAINDER 함수는 결과값은 일치하나 내부적으로 연산 방법이 다르다고 한다. 속도면에서는 큰 차이가 없다고 하니 아무거나 쓰면 될 것 같다. -15를 3으로 나누고 싶다면 나눌 값은 15, 나누는 값은 3 - 몫 구하기 FLOOR(나눌 값/나누는 값) - 나머지 구하기 MOD(나눌 값,나누는 값) REMAINDER(나눌 값,나누는 값)
-
문자열 합치기 - CONCAT과 ||Data Engineering/SQL 2021. 8. 8. 23:55
SQL에서 문자열을 합치는 방법은 CONCAT 함수를 사용하는 것과 ||(Double vertical bars)를 사용하는 방법 두 가지가 있다. 여러 개의 문자열을 합치고자 할 때, 각 DB별로 방법이 다를 수 있기 때문에 주의해야한다. ORACLE, MYSQL 제외 DB SELECT CONCAT(first_name, ' ' ,last_name) FROM EMPOYEES SELECT first_name || ' ' || last_name FROM EMPOYEES 두 코드의 실행 결과가 동일하다. ORACLE 오라클의 CONCAT함수는 매개변수를 두 개만 받는다. 따라서 두 개 이상의 값/행을 연결하기 위해서는 중첩 concat을 사용하거나 ||를 사용해야한다. 어느 행에 결측치가 존재할 경우, 결측치를..