>데이터 베이스 >MySQL 튜토리얼 >MySQL에서 `AVG` 및 `GROUP BY`를 사용하여 테이블 내 여러 그룹에 대한 열의 여러 평균을 계산하려면 어떻게 해야 합니까?

MySQL에서 `AVG` 및 `GROUP BY`를 사용하여 테이블 내 여러 그룹에 대한 열의 여러 평균을 계산하려면 어떻게 해야 합니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-27 11:56:02525검색

How can you use  `AVG` and `GROUP BY` in MySQL to calculate multiple averages of a column for different groups within a table?

AVG 및 Group By를 사용한 SQL 쿼리

MySQL에서 테이블 내의 여러 그룹에 대한 열의 여러 평균을 추출하는 쿼리는 다음을 수행할 수 있습니다. 이는 AVG() 및 GROUP BY 절의 조합을 사용하여 달성됩니다. 다음 구조의 data_r1 테이블을 고려해 보십시오.

mysql> select id, pass, val from data_r1 limit 10;
+------------+--------------+----------------+
| id         | pass         | val            |
+------------+--------------+----------------+
| DA02959106 | 5.0000000000 | 44.4007000000 |
| 08A5969201 | 1.0000000000 | 182.4100000000 |
| 08A5969201 | 2.0000000000 | 138.7880000000 |
| DA02882103 | 5.0000000000 | 44.7265000000 |
| DA02959106 | 1.0000000000 | 186.1470000000 |
| DA02959106 | 2.0000000000 | 148.2660000000 |
| DA02959106 | 3.0000000000 | 111.9050000000 |
| DA02959106 | 4.0000000000 | 76.1485000000 |
| DA02959106 | 5.0000000000 | 44.4007000000 |
| DA02959106 | 4.0000000000 | 76.6485000000 |

이 테이블에서 원하는 정보를 추출하려면 다음 쿼리를 사용하십시오.

SELECT id, pass, AVG(val) AS val
FROM data_r1
GROUP BY id, pass;

이 쿼리는 data_r1 테이블의 행을 그룹화합니다. id 및 pass 열을 모두 기준으로 한 다음 각 그룹에 대한 val 열의 평균 값을 계산합니다. 결과는 id와 pass의 각 고유 조합에 대해 하나의 행이 있고 val에 해당하는 평균 값이 있는 테이블입니다.

동일한 결과를 얻지만 다음과 같은 각 고유 ID에 대해 단일 행을 반환하는 대체 쿼리입니다. 다중 평균 값:

SELECT d1.id,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 WHERE d2.id = d1.id AND pass = 1) as val_1,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 WHERE d2.id = d1.id AND pass = 2) as val_2,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 WHERE d2.id = d1.id AND pass = 3) as val_3,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 WHERE d2.id = d1.id AND pass = 4) as val_4,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 WHERE d2.id = d1.id AND pass = 5) as val_5,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 WHERE d2.id = d1.id AND pass = 6) as val_6,
    (SELECT IFNULL(ROUND(AVG(d2.val), 4) ,0) FROM data_r1 d2 WHERE d2.id = d1.id AND pass = 7) as val_7
FROM data_r1 d1
GROUP BY d1.id

이 쿼리는 중첩된 하위 쿼리를 사용하여 특정 ID 그룹 내의 각 통과 값에 대한 평균 값을 계산합니다. IFNULL() 함수는 null 값이 0으로 대체되어 0으로 나누는 오류를 방지하는 데 사용됩니다.

위 내용은 MySQL에서 `AVG` 및 `GROUP BY`를 사용하여 테이블 내 여러 그룹에 대한 열의 여러 평균을 계산하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.