• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

CASE 아스타 위치에 따른 오류 문제

24.02.03 23:24 작성 조회수 132

0

영상에서 선생님 구문데로 실행했는데 아스타 위치에 따라 작동이 됩니다.

아스타를 SELECT 뒤에 *, 정상작동하나 AS NAME 뒤에서붙였을땐 오류가 나오는데 뭐가 문제일까요?

정상실행 경우(SELECT *, CASE )

오류 발생

END AS NAME, *

SELECT CASE

WHEN CategoryID = 1 THEN '음료'

WHEN CategoryID = 2 THEN '탄산'

ELSE '기타' END AS NAME, *

FROM Products

 

 

 

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.02.05

안녕하세요, 인프런 AI 인턴입니다.

님의 SQL 쿼리에서 CASE 구문을 사용하실 때 주의해야 할 점이 있습니다.
쿼리의 SELECT 절에서 별표()를 사용해 모든 컬럼을 불러오시려고 하실 때, 다른 컬럼 혹은 표현식을 별표() 앞에 명시하실 경우에는 문제가 없습니다.
그러나 별표(*)를 사용한 후에, 추가로 컬럼이나 표현식을 명시할 때는 반드시 콤마(,)로 구분해 주셔야 합니다.

예를 들어, 정상적으로 작동하는 경우에는 다음과 같습니다:

SELECT *, CASE
WHEN CategoryID = 1 THEN '음료'
WHEN CategoryID = 2 THEN '담배'
ELSE '기타' END AS NAME
FROM Products

하지만, 별표(*) 이후에 CASE 구문을 사용하시려면 다음과 같이 콤마를 추가하여 구분해주셔야 합니다:

SELECT CASE
WHEN CategoryID = 1 THEN '음료'
WHEN CategoryID = 2 THEN '탄산'
ELSE '기타' END AS NAME, *
FROM Products

위 코드에서 END AS NAME, * 부분에서 콤마가 없어서 문법 오류가 발생했습니다.

올바른 구문으로 수정하면 다음과 같습니다:

SELECT
CASE
WHEN CategoryID = 1 THEN '음료'
WHEN CategoryID = 2 THEN '탄산'
ELSE '기타' END AS NAME,
*
FROM Products

제대로 작동하는지 확인하시려면 수정한 쿼리를 실행해 보시기 바랍니다.

윤원국님의 프로필

윤원국

질문자

2024.02.12

제가 질문드린 예제를 보시면 SELECT *, CASE 부분은 정상작동한다고 적어놨습니다. 지금 오류가발생한 부분은 END AS NAME, * <- 여기서 NAME 뒤에 콤마를 넣고 * 를 입력했는데 오류가 발생한 겁니다. 올바른 구문으로 수정해주신거와 제가 오류로 발생됬다고 적은 구문이랑 지금 차이가 없어 보이며, 작동이 안됩니다. 제 질문 제대로 보고 답변하신게 맞는지 아님 진짜 AI인가요?

SELECT CASE

WHEN CategoryID = 1 THEN '음료'

WHEN CategoryID = 2 THEN '탄산'

ELSE '기타' END AS NAME, *

FROM Products

AI의 답변에 오류가 있었네요. 죄송합니다.

올려주신 코드처럼 *가 다른 컬럼 뒤에 오는 것은 MySQL이 지원하지 않습니다.

이 때는 * 앞에 테이블명을 함께 붙여주면 해결 가능합니다.

SELECT CASE WHEN CategoryID = 1 THEN '음료'
            WHEN CategoryID = 2 THEN '탄산'
            ELSE '기타' END AS NAME,
       Products.*
FROM Products