• 카테고리

    질문 & 답변
  • 세부 분야

    데이터베이스

  • 해결 여부

    미해결

추가질문드립니다...

20.07.14 12:51 작성 조회수 126

0

답변감사드립니다 선생님! 요즘 시간가는지 모르고 강의듣고있네요 이제 5개중 일주일만에 2개 들었네요! 다름이아니라 제가 이렇게 추가질문 드리는이유는 위에 여쭈어보았던 질문에 대해 제 컴퓨터에서 각각 2개의 sql구문

1. SELECT items.provider, count(*), avg(items.dis_price), avg(items.discount_percent)

FROM items INNER JOIN ranking ON items.item_code=ranking.item_code

GROUP BY items.provider

ORDER BY COUNT(*) DESC;

2. SELECT provider, count(*), avg(dis_price), avg(discount_percent)

FROM items

GROUP BY provider

ORDER BY COUNT(*) DESC;

을 실행해본결과 count(*), avg(items.dis_price), avg(items.discount_percent)의 실행값이 달라서 입니다. 제가 생각하기론 판매자별, 베스트상품 갯수, 평균할인가격, 평균할인율을 베스트상품 갯수가 높은 순으로 출력 할경우에는 판매자나 가격에관한 정보는 items테이블에만 있기에 ranking에 있는 field가 포함되지 않아서 쓰지않아도 될거라고 판단하였습니다. 제가 생각한 바로는 만약 items테이블과 ranking테이블이 추가로 innerjoin하게 될경우에는 all카테고리에서 베스트 상품으로 이미 카운트된 특정상품에 대해 해당 세부카테고리로 들어가서 중복으로 카운트되는 경우가 생기지 않을까 생각했습니다. 그런데 innerjoin 을 쓰는 방식이 SQL 에서 가이드한 정석적인 방법이라고 하셔서 제가 이해한게 맞는지에대해 의구심이 생겼습니다.. 혹시라도 제가 잘못이해하고 있으면 죄송합니다..

답변 1

답변을 작성해보세요.

0

1번은 items.item_code=ranking.item_code 인 데이터에 대해서만, 

items.provider, count(*), avg(items.dis_price), avg(items.discount_percent) 을 계산한 것이라고 보여져요.

2번은 items 에 있는 provider 로 그룹핑한 데이터에 대해서만,

provider, count(*), avg(dis_price), avg(discount_percent) 값을 계산한 것이라고 보여져요.

두 구문이 계산하는 기준이 다르기 때문에, 값이 다른 것이 아닌가 생각이 듭니다.

감사합니다.