eunsol
293
2021-06-11 20:23:08
4
147

데이터 베이스 질문있습니다.


SELECT supplierid , categoryid , AVG(price)
FROM products 
GROUP BY 1 ,2 // GROUP BY 를 넣어주면 전체 로우가다 나오지만 GROUP BY  구문을 뺴고 실행하면 
로우가 1개밖에 출력되지않는데 그이유가 궁금합니다.

https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all 여기서 테스트 했습니다.


0
  • 답변 4

  • 벨라12
    224
    2021-06-11 20:30:32

    GROUP BY  뺴면 조건절도 없으니 db 내용 리스트 형식으로 결과값이 나오지 않나요? 

    GROUP BY는 조건을 나누는 거니까... 그에 따른 조건(부서별이라든가 지역별이라든가..)에 맞춰 결과값이 나오고요..

  • eunsol
    293
    2021-06-11 20:46:04


    GROUP BY 내용입니다.

    GROUP BY 사용하지않을떄입니다.      


    GROUP  BY 가 조건문을 나눠주는 친구엿나요?  GROUP BY 는 컬럼을 하나의 그룹으로 나눠주는역활을 하는게 아닌가여? 


  • 벨라12
    224
    2021-06-12 06:22:59 작성 2021-06-12 06:38:26 수정됨

    개발 입문 한달이 되가서 잘 모르지만,,,조건문??

    댓글로 보여주신 결과 보면...

    group by 안했을때 supplierID 1과 categaryId 1의 평균값이28.8.....로 나오는데, group by  햇을때 supplierID 1과 categaryId 1의 평균값은 18.5로 나오네요,..,

    하나만 나오네,,,여러게 나오네 고민하기 전에 이를 이해하심이...group by는 컬럼을 하나의 그룹으로 나눈다기보다 묶는다고 생각하세요,,,group by라는 영어 원뜻도 나눈다고 이해하기에는,,,

    그리고 group by 다음은 컬럼명 혹 수식으로 아는데 1,2가 컬럼명인지..,..


  • 장독깨기
    3k
    2021-06-12 07:38:08

    GROUP 절은 데이터를 그룹으로 묶어서 그 그룹의 평균이나 최대,최소, 합 등의 값을 얻고자 하는 겁니다.

    가령 남성/20대 그룹의 평균 키는? 여성그룹의 평균 키는? 뭐 이런 식이죠..

    그러니 GROUP BY 절을 쓰면 필히 구분할 그룹 컬럼 과 그룹함수( avg,max,...) 를 사용해야됩니다.

    select 젠더, avg(키) from data group by 젠더;

    이건 남성 평균키와 여성 평균 키를 구하는 겁니다.


    근데, 남성/여성 구분없이 전체 평균 키를 구하려면,

    이때는 구분할 그룹이 없으니 GROUP 절과 그룹 컬럼 을 쓸 필요가 없습니다.

    즉, select avg( 키) from data;


    여기서 select 젠더, avg(키) from data;

    이 쿼리는 뭔가 어색하죠? 전체 평균키를 구하고자 하는건데 뜬금없이 젠더 컬럼이 있습니다.

    예전엔 이런 쿼리는 오류가 난거 같은데,.. 아마 db에 따라 오류를 내는 경우도 있을 겁니다.

    암튼 이때 저 젠더 컬럼의 값은 의미가 없습니다.


  • 로그인을 하시면 답변을 등록할 수 있습니다.