강의

멘토링

커뮤니티

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

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

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

Học thiết kế hệ thống quy mô lớn thông qua việc tự tay xây dựng với Spring Boot - Bảng tin

API danh sách bài viết - Triển khai số trang

*가 아니가 article_id로 count를 뽑아줘야 할까요?

Đã giải quyết

Viết

·

78

0

@Query(
            value ="select count(t.article_id) from ( " +
                   "   select article_id from article where board_id = :boardId " +
                   "limit :limit " +
                   ") t",
            nativeQuery = true
    )
    Long count(@Param("boardId") Long boardId, @Param("limit") Long limit);

위와 같이

count(*)가 아니라 count(t.article_id) 처럼 alias도 붙여야 하고, 모든 걸 뽑는 게 아니라 딱 서브쿼리 안에서 추출한 article_id만 count로 뽑아줘야 테스트가 통과되더라고요.

이유가 있을까요...?

javamysqlspring-bootkafkaredis

Câu trả lời 3

0

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

Bruce Han님, 안녕하세요!

 

말씀주신 내용으로는 어떤 사유로 테스트가 실패한 것인지 원인 파악이 어렵네요..!

어차피 서브쿼리 추출 결과에 대해 모든 행을 카운트하는 것이므로 count(*), count(t.article_id) 차이는 없어야 합니다.

정확한 에러 로그도 올려주시면 확인이 수월할 것 같습니다!

 

추가 댓글 주신 내용으로는,

서브쿼리 파생 테이블 alias 미지정 문제였던 것이고, 해결하신 것으로 보이는데 아니라면 말씀주세요!

0

Bruce Han님의 프로필 이미지
Bruce Han
Người đặt câu hỏi

MySQL은 FROM (서브쿼리) 형태의 파생 테이블에 반드시 별칭이 있어야 합니다.
count(*) 버전에서 별칭이 빠지면 문법 오류가 나고, count(t.article_id)로 고치면서 … ) t를 함께 적으니 우연히 통과한 것입니다.
별칭만 붙이면 count(*)도 동일하게 정상 동작합니다.

오라클만 써봐서 이런 건줄 몰랐네요...

-1

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

질문해 주신 내용은 SQL 쿼리에서 count(*)count(column_name) 의 차이에 대한 부분입니다. 두 방식은 함수가 동일하게 동작할 것처럼 보일 수 있지만, 실제로는 약간의 차이점이 있을 수 있습니다.

count(*) vs count(column_name)

  1. count(*):

    • 모든 레코드를 계산합니다. 즉, 특정 테이블의 행 수를 세기 때문에 특정 열의 유무와 관계없이 레코드 수를 반환합니다. 컬럼에 NULL 값이 있어도 전체 레코드 수를 세기 때문에 유리합니다.
  2. count(column_name):

    • 지정된 열에서 NULL 값이 아닌 레코드 수를 세는 방식입니다. 만약 열에 NULL 값이 포함된다면, 해당 레코드는 제외되므로 전체 레코드 수와 다를 수 있습니다.
    • 쿼리에서 사용된 컬럼에 NULL 값이 없는 경우에는 count(*) 와 동일한 결과를 반환합니다.

count(t.article_id) 를 사용하는가?

문맥상에서 서브쿼리를 사용하여 특정 필드 article_id 만을 추출하는 경우, count(article_id) 는 서브쿼리를 통해 반환된 결과의 비어 있지 않은 행 수를 세게 됩니다. 따라서, count(*)count(t.article_id) 가 동일한 결과를 가져올 수 있지만, 특정 상황에서는 count(t.article_id) 가 더 구체적이거나 명확할 수 있습니다.

특히, 특정 테스트나 쿼리 최적화 측면에서 count(t.article_id) 를 이용해야 테스트가 통과되는 경우가 있다면, 해당 테스트 로직에서 더 모호한 조건을 피하고 article_id 값의 존재를 명확히 하기 위함일 수 있습니다.

이와 유사한 질문이나 쿼리 최적화 문제를 다룬 게시물을 더 보고 싶다면 아래 링크를 확인해 보세요:
- SQL에서 count() 함수 사용 시 고려해야 할 점

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 충분치 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Bruce Han님의 프로필 이미지
Bruce Han
Người đặt câu hỏi

링크 주신 거 404 뜹니다

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

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

Đặt câu hỏi