강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của nhs20golstaff5838
nhs20golstaff5838

câu hỏi đã được viết

Ngữ pháp SQL cơ bản để tấn công SQL SQL thành công

Câu điều kiện

case when에 count를 넣으면?

Đã giải quyết

Viết

·

942

1

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

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

sql모의해킹mysql

Câu trả lời 2

0

crehacktive님의 프로필 이미지
crehacktive
Người chia sẻ kiến thức

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

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

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

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

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

0

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

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

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

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

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

Hình ảnh hồ sơ của nhs20golstaff5838
nhs20golstaff5838

câu hỏi đã được viết

Đặt câu hỏi