인프런 커뮤니티 질문&답변

제노비아님의 프로필 이미지

작성한 질문수

성공적인 SQL 인젝션 공격을 위한, SQL 기본 문법

조건문

case when에 count를 넣으면?

해결된 질문

24.05.04 10:16 작성

·

285

1

select * from members m where m.idx=(case when count(m.idx)=1 then 2 else 1 end)

이렇게 하면 에러가 나오는데 이유를 모르겠네요

답변 2

0

크리핵티브님의 프로필 이미지
크리핵티브
지식공유자

2024. 06. 18. 14:13

count는 집계 함수로 출력 레코드에 대한 개수를 산정하여 출력합니다.

따라서 FROM > WHERE 이후 레코드 출력 개수가 정해지며, 이후 사용 가능합니다.

질문자님께서 말씀하신 쿼리가 가능하려면, 서브쿼리를 이용하는 방법이 있습니다.

select * from members where idx=(case when (select count(*) from members)=1 then 2 else 1 end)

이렇게 사용이 가능합니다.

0

인프런 AI 인턴님의 프로필 이미지

2024. 05. 05. 10:21

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

제노비아님의 질문을 보면, SQL 문법에 관한 문제로 보이는데 제공된 정보 중 직접적으로 해당 질문에 대한 답변을 줄 내용은 없습니다. 하지만 문제의 원인에 대해 개념적으로 설명드릴 수 있습니다.

SELECT 문 내에서 WHERE 절이 처리되는 시점에는 아직 전체 결과 집합에 대한 집계 함수(COUNT 같은)를 적용할 수 없습니다. 왜냐하면 WHERE 절은 각 행에 대해 조건을 평가하고 결과 집합을 생성하기 전에 작동하기 때문입니다. 즉, WHERE 절 내에서 COUNT 같은 집계 함수를 사용하려고 하면, 그 시점에서는 아직 전체 집합이 결정되지 않아 에러가 발생합니다.

이 경우, 하고자 하는 작업을 수행하기 위해선 서브 쿼리나 HAVING 절(집계 함수와 함께 사용될 경우)을 사용하는 등의 다른 방법을 고려해야 합니다.

질문하신 부분과 정확히 일치하는 해결책을 제공하지는 못하지만, 이러한 정보가 도움이 될 수 있기를 바랍니다. 추가적인 도움이 필요하시다면 질문의 상세한 내용과 함께 다시 문의해주시길 바랍니다.