전체 글

Daily/잡담

갤럭시탭 S11 리뷰

드디어 많은 분들이 기다리던 갤럭시 탭 S11이 제 손에 들어왔습니다. 미니멀하면서도 고급스러운 패키지를 열고 처음 마주한 탭 S11은 완벽한 디자인과 압도적인 디스플레이로 감탄을 자아내게 했습니다. 하지만 이번 갤럭시 탭 S11의 진정한 핵심은 바로 하드웨어를 뛰어넘는 강력한 'AI 기능'에 있었습니다. 며칠간 사용해보며 가장 인상 깊었던 두 가지 AI 기능을 중심으로 첫인상 리뷰를 시작해 보겠습니다. 정보의 홍수 속, 나만의 AI 비서: 웹 어시스트 우리는 매일 수많은 정보의 파도 속에서 살아갑니다. 긴 분량의 뉴스 기사, 외국어 아티클, 각종 논문까지 모두 읽고 소화하기란 여간 어려운 일이 아니죠. 갤럭시 탭 S11은 이 모든 과정을 획기적으로 바꿔주었습니다. 인터넷 브라우저에 새롭게 탑재된 '웹 ..

DB/Oracle - SQL

Oracle SQL | 집계 함수와 GROUP BY 사용 규칙 – 비집계 컬럼과 집계 함수 구분

SQL을 학습하거나 사용하는 과정에서 많은 사용자가 GROUP BY에 포함되지 않은 컬럼이나 표현식은 SELECT 절에서 사용할 수 없다고 오해하는 경우가 있다. 그러나 예외가 존재한다.바로 집계 함수는 GROUP BY에 포함되지 않아도 SELECT 절에서 자유롭게 사용할 수 있다는 점이다.핵심 개념비집계 컬럼: GROUP BY에 반드시 포함되어야 하며, 그룹의 기준을 결정한다.집계 함수: SUM, COUNT, AVG, MAX, MIN 등은 그룹화된 레코드에 대해 계산을 수행하므로 GROUP BY에 포함될 필요가 없다.즉, SELECT 절에 나타나는 컬럼 중 집계 함수가 아닌 컬럼은 반드시 GROUP BY에 있어야 하지만, 집계 함수는 제외된다.예시SELECT BOK.AUTHOR_ID, AUT.AUT..

DB/Oracle - SQL

Oracle SQL | 그룹별 조건 필터링 – GROUP BY + IN 서브쿼리 패턴

이 쿼리 패턴은 다음과 같은 논리 구조를 따른다.GROUP BY: 집계 키를 기준으로 그룹화HAVING: 그룹별로 조건을 적용IN 서브쿼리: 조건을 만족한 키값만 메인 쿼리에서 필터링즉, 서브쿼리에서 조건을 만족한 키 목록을 추출하고, 그 키를 기반으로 원본 테이블에서 해당 행들을 다시 조회하는 방식이다.예시SELECT ID, NAME, HOST_IDFROM PLACESWHERE HOST_ID IN ( SELECT HOST_ID FROM PLACES GROUP BY HOST_ID HAVING COUNT(*) > 1)ORDER BY ID ASC;쿼리 해석서브쿼리: PLACES 테이블에서 HOST_ID 기준으로 그룹화한 뒤, COUNT(*) > 1 조건을 만족하는 HOST_ID만 추출한다.IN 절: ..

DB/Oracle - SQL

Oracle SQL | 그룹별 최대값을 가진 전체 행 추출 – GROUP BY + IN 서브쿼리 패턴

SQL에서 특정 컬럼을 기준으로 그룹화한 뒤, 각 그룹에서 최대값을 가진 행 전체를 조회해야 하는 상황이 많다. 예를 들어, 부서별 최고 연봉자, 상품군별 최대 판매량 상품, 지역별 최다 방문 지점 등을 추출하는 경우가 이에 해당한다.이 문서에서는 GROUP BY와 집계 함수(MAX)를 사용한 뒤, 해당 값을 가지는 전체 행을 추출하는 실무적 쿼리 패턴을 설명한다.핵심 개념: GROUP BY는 값만 추출하며, 행 전체는 반환하지 않는다가장 먼저 떠올릴 수 있는 접근은 다음과 같다SELECT 그룹컬럼, MAX(대상컬럼)FROM 테이블명GROUP BY 그룹컬럼;위 쿼리는 그룹별로 최대값만 반환한다. 그러나 실무에서는 이 최대값을 가지는 원본 행의 나머지 정보(예: ID, 이름 등)를 함께 조회해야 하는 경우..

DB/Oracle - SQL

Oracle SQL | 날짜 차이 계산과 ROWNUM 처리

Oracle SQL에서 날짜 간의 차이를 계산하고, 그 결과를 기준으로 상위 N건만 추출해야 할 경우가 자주 발생한다.이때 사용하는 기본 연산은 날짜 - 날짜, 그리고 상위 제한은 ROWNUM이다.그러나 두 기능은 실행 순서나 동작 방식에서 주의할 점이 많다.1. 날짜 차이 계산Oracle에서는 다음과 같이 DATE 타입 간의 차이를 직접 계산할 수 있다.SELECT 종료일자 - 시작일자 AS 기간FROM 테이블명;특징결과는 일 수(DAY) 단위의 NUMBER로 반환됨TO_DATE 또는 TIMESTAMP가 포함되어도 암시적으로 변환 처리됨TRUNC, ROUND, FLOOR 등의 함수와 함께 자주 사용됨2. 정렬 후 상위 N건 추출 – 기본 구조단순히 상위 N건을 가져오기 위해 다음과 같이 작성하면 의도한..

DB/Oracle - SQL

Oracle SQL | NOT EXISTS와 ROW_NUMBER 조합으로 미존재 조건 + 상위 N건 처리

Oracle SQL에서 특정 조건에 해당하지 않는 데이터, 즉 다른 테이블에 존재하지 않는 데이터를 필터링해야 할 때 가장 안정적인 방식은 NOT EXISTS이다.여기에 정렬된 상위 N건을 추출하려면 ROW_NUMBER() 윈도우 함수를 조합하는 것이 명확하고 정확한 접근이다.이 글에서는 존재하지 않는 조합을 필터링하고, 그 중에서 정렬 기준으로 상위 N건만 추출하는 구조를 정리한다.1. 예제 상황 가정한 테이블에 기준 데이터 존재다른 테이블에는 그 중 일부 데이터만 존재 (부분 조인 관계)특정 컬럼을 기준으로 정렬 후 상위 N건 추출2. NOT EXISTS + ROW_NUMBER() 조합SELECT NAME, DATETIMEFROM ( SELECT INS.*, ROW_NUMBER..

카테고리 없음

Oracle SQL | GROUP BY + HAVING

동일한 회원이 동일한 상품을 두 번 이상 구매했는지를 판단할 때,처음엔 CASE WHEN, DECODE, ROW_NUMBER() 등 조건문 기반 방식으로 접근하기 쉽다.하지만 이 경우는 오히려 GROUP BY + HAVING COUNT(*) > 1 패턴이 더 직관적이고 성능도 유리하다.예시 구조ONLINE_SALE 테이블ONLINE_SALE_ID판매 IDUSER_ID회원 IDPRODUCT_ID상품 IDSALES_AMOUNT판매 수량SALES_DATE판매 일자조건(USER_ID, PRODUCT_ID) 조합은 중복 가능단, (USER_ID, PRODUCT_ID, SALES_DATE) 조합은 유일잘못된 접근 방식SELECT USER_ID, PRODUCT_ID, CASE WHEN COUNT(*) > ..

AidenYoun
ERP Developer