[PHP] MySQL 그룹별 집계 GROUP BY

2022. 10. 8. 04:05Program/PHP

125_PHP MySQL 그룹별 집계 GROUP BY

[요약]

  • 그룹별로 집계함수를 사용하는 명령문 GROUP BY에 대해 알아보자.

그룹별 집계는 특정 집단의 수치를 집계함수를 이용하여 값을 표시하는 것이다.

예를 들어, schoolRecord 테이블에서 반별로 학생들이 영어 평균값을 구할 때에는 GROUP BY를 사용한다.


[GROUP BY 사용 방법]

SELECT 필드명 FROM 테이블명 GROUP BY 필드명

다음은 반별로 학생들의 영어 점수 평균값을 구하는 쿼리문이다.

SELECT class, avg(english) FROM schoolRecord GROUP BY class;

 

다음은 위의 쿼리문을 사용한 예제이다.

현재 class 필드의 값에 NULL 인 레코드도 있으므로 이를 원래의 값으로 변경후 그룹집계 쿼리문을 실행하자.

[예제: 128-1_groupBy.php ]

<?php
    include $_SERVER['DOCUMENT_ROOT'] . '/php/108-2_connectDB.php';

    $sql = "UPDATE schoolRecord SET class = 1 WHERE schoolRecordID = 1";
    $dbConnect->query($sql);

    $sql = "SELECT class, avg(english) AS avgEng FROM schoolRecord GROUP BY class";
    $result = $dbConnect->query($sql); // 쿼리 송신

    $dataCount = $result->num_rows;

    for ($i = 0; $i < $dataCount; $i++) {
      $memberInfo = $result->fetch_array(MYSQLI_ASSOC);
      echo "반 : " . $memberInfo['class'];
      echo '<br>';
      echo '평균 영어 점수 : ' . $memberInfo['avgEng'];
      echo '<hr>';
    }
?>

실행결과

class를 GROUP BY 했기 때문에 class의 값별로 영어 점수의 평균을 표시하면, 2반이 가장 영어를 잘한다는 것을 알 수 있다.

그럼 각 반별로 일본어 점수의 합계를 구하고 그 값 중에 170 이상인 값을 표시해보자.

 

다음은 각 반의 일본어점수의 합계를 구하는 쿼리문이다.

SELECT class, sum(japanese) FROM schoolRecord GROUP BY class;

지금까지 조건을 제시할 때는 WHERE를 사용했는데,

GROUP BY를 사용할 때 조건을 제시하려면 WHERE 대신 HAVING을 사용한다.

 

다음은 각 반의 일본어 점수의 합계에서 170점 이상인 값을 표시하는 쿼리문이다.

SELECT class, sum(japanese) FROM schoolRecord GROUP BY class HAVING sum(japanese) >= 170;

 

다음은 위의 쿼리문을 활용한 예제이다.

[예제: 128-2_having.php ]

<?php
    include $_SERVER['DOCUMENT_ROOT'] . '/php/108-2_connectDB.php';

    $sql = "SELECT class, sum(japanese) AS sumJap FROM schoolRecord GROUP BY class HAVING sumJap >= 170";
    $result = $dbConnect->query($sql);

    $dataCount = $result->num_rows;

    for ($i = 0; $i < $dataCount; $i++) {
      $memberInfo = $result->fetch_array(MYSQLI_ASSOC);
      echo '반 : ' . $memberInfo['class'];
      echo '<br>';
      echo '합산 점수 : ' . $memberInfo['sumJap'];
      echo '<hr>';
    }
?>

실행결과

 

 

 


 

 

 

초보자를 위한 PHP 200제
김태영 지음 | 정보문화사