SQL을 사용하여 다양한 패스의 평균 값 계산
MySQL에서는 AVG 및 GROUP BY를 사용하여 데이터를 그룹화하여 평균 값을 검색할 수 있습니다. 기능. 그러나 특정 열의 다양한 값에 대한 평균을 계산하는 등 여러 기준을 처리할 경우 작업이 약간 더 복잡해집니다.
이 경우 목표는 'val' 열의 평균을 추출하는 것입니다. 1부터 7까지의 다양한 'pass' 값에 대한 각 고유 'id'에 대해.
하위 쿼리 솔루션
한 가지 접근 방식은 하위 쿼리를 사용하는 것입니다. AVG 함수 내 'pass'의 각 값. 그러면 각 'id' 및 'pass' 조합에 대한 값 세트가 반환됩니다.
<code class="sql">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 = 7) as val_7 from data_r1 d1 GROUP BY d1.id</code>
이 쿼리는 먼저 'data_r1' 테이블에서 고유한 'id' 값을 가져옵니다. 그런 다음 각 'id'에 대해 7개의 하위 쿼리를 실행하여 'pass'의 가능한 값 각각에 대한 평균값을 계산하고 이를 별도의 'val_n' 열에 저장합니다. IFNULL 함수는 하위 쿼리가 NULL 값을 반환하는 경우를 처리하는 데 사용되며 결과는 숫자 또는 0이 되도록 보장합니다.
이 접근 방식의 장점은 각 'id'에 대해 단일 행을 반환한다는 것입니다. 결과를 가지고 작업하기가 더 쉬워졌습니다. 그러나 특히 'pass'에 가능한 값이 많은 경우 다소 장황할 수 있습니다.
대체 접근 방식
더 간결한 방법을 선호하는 경우 다음을 수행할 수 있습니다. 유사한 결과를 얻으려면 GROUP BY 및 CASE 문의 조합을 사용하십시오.
<code class="sql">SELECT id, SUM(CASE WHEN pass = 1 THEN val END) / COUNT(DISTINCT CASE WHEN pass = 1 THEN id END) AS val_1, SUM(CASE WHEN pass = 2 THEN val END) / COUNT(DISTINCT CASE WHEN pass = 2 THEN id END) AS val_2, [...] SUM(CASE WHEN pass = 7 THEN val END) / COUNT(DISTINCT CASE WHEN pass = 7 THEN id END) AS val_7 FROM data_r1 GROUP BY id</code>
이 쿼리는 여러 CASE 문을 사용하여 'pass' 값을 평가하고 해당 'val' 값만 계산에 포함합니다. 분모의 COUNT(DISTINCT ...) 표현식은 특정 'id' 및 'pass' 조합에 대해 'val' 값이 여러 개 있는 경우에도 평균이 올바르게 계산되도록 보장합니다.
다시 한 번 말씀드리지만, IFNULL 함수를 사용하면 나누기 결과가 NULL이 되는 경우를 처리하여 출력이 숫자 또는 0인지 확인할 수 있습니다.
어떤 접근 방식을 선택하든 이러한 쿼리는 평균 'val' 값을 효과적으로 추출합니다. 'data_r1' 테이블의 다양한 'pass' 값에 대한 각 고유 'id'.
위 내용은 MySQL에서 SQL을 사용하여 다양한 패스의 평균값을 계산하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!