PassaTime↗
모든 이야기
짧은 이야기 AI 활용 · SQL 합계

AI가 짠 SQL은 실행되는데, JOIN 뒤 주문 합계가 왜 늘었을까요?

주문 하나에 여러 품목이 연결되면 주문 총액도 여러 행에 반복됩니다. 더하기 전에 한 행이 무엇을 뜻하는지 확인하세요.

쿼리가 오류 없이 실행되어도 원한 금액을 계산한다고 볼 수는 없습니다. SQLite의 SELECT 문서는 JOIN이 일치하는 행을 결합하는 방식을 설명합니다. 주문 하나에 여러 품목이 대응하면 결합 결과에 주문 단위 총액이 반복될 수 있습니다.

작은 예제로 오류를 확인하세요

메모리 안의 SQLite에 가상 데이터를 넣어 시험했습니다. 주문 1·2의 총액은 각각 1만원·2만원이고 품목 수는 각각 2개·1개입니다. SELECT SUM(o.total) FROM orders o JOIN items i ON i.order_id=o.id; 는 4만원을 반환합니다. 실제 두 주문의 합계는 3만원입니다.

무엇을 한 번씩 셀지 정하세요

질문이 ‘품목이 하나 이상 있는 주문의 총액’이라면 시험한 쿼리는 SELECT SUM(o.total) FROM orders o WHERE EXISTS (SELECT 1 FROM items i WHERE i.order_id=o.id); 입니다. 해당 예제에서 3만원을 반환하고 조건에 맞는 주문을 한 번씩 셉니다. 다른 업무 질문까지 고치는 만능 수정은 아닙니다.

금액에 DISTINCT를 붙이면 끝일까요?

두 번째 예제에서는 서로 다른 두 주문이 각각 1만원입니다. 결합한 행에 SUM(DISTINCT o.total)을 쓰면 원하는 2만원이 아니라 1만원이 나옵니다. 금액이 같다고 중복 주문은 아닙니다.

AI에게 수식보다 행의 의미부터 설명하게 하세요

입력과 출력의 한 행이 무엇을 나타내는지, 각 JOIN이 어떤 관계인지 설명하게 하세요. 여러 품목·같은 금액·연결이 없는 경우를 시험하고 손으로 계산한 예제와 대조한 뒤 실제 데이터에 맞추세요.

2026년 10월 14일 발행. Python SQLite 모듈의 :memory:만 사용해 두 가상 데이터와 명시한 SELECT 결과를 직접 실행했습니다. 운영 데이터베이스나 AI 코딩 서비스에는 접속하지 않았으며 다른 SQL 방언·업무 규칙은 시험하지 않았습니다.

출처: SQLite · SELECT.