> 데이터 베이스 > MySQL 튜토리얼 > 단일 SQL SELECT 문의 COUNT()에서 백분율을 효율적으로 계산하려면 어떻게 해야 합니까?

단일 SQL SELECT 문의 COUNT()에서 백분율을 효율적으로 계산하려면 어떻게 해야 합니까?

Barbara Streisand
풀어 주다: 2025-01-03 20:15:40
원래의
341명이 탐색했습니다.

How Can I Efficiently Calculate Percentages from a COUNT() in a Single SQL SELECT Statement?

SQL의 동일한 SELECT 문의 SUM()에서 백분율 계산

정수 필드 value_a 및 value_b가 있는 my_obj 테이블의 컨텍스트에서 , value_a가 value_b와 같은 행의 비율을 계산할 수 있습니다. 초기 쿼리에서는 저장 프로시저를 사용하여 이를 달성하려고 시도했지만 오류가 발생했습니다.

간소화되고 더욱 효율적인 솔루션

더 간단하고 빠른 접근 방식은 다음과 같습니다.

SELECT property_name
      ,(count(value_a = value_b OR NULL) * 100) / count(*) AS pct
FROM   my_obj
GROUP  BY 1;
로그인 후 복사

이 쿼리는 다음과 같습니다.

  • count(value_a = value_b OR NULL) 표현식을 사용하여 value_a가 value_b와 동일한 행 수를 계산하여 백분율 분자입니다. OR NULL을 사용하면 같음 비교에서 NULL 값이 FALSE로 처리됩니다.
  • NULL 값이 있는 행을 포함하여 모든 행의 개수를 계산하는 count(*)를 사용하여 백분율의 분모를 계산합니다.
  • 분자를 분모로 나누어 백분율을 구하고 이를 별칭에 할당합니다. pct.

NULL 값 처리

이 솔루션은 잘못된 결과나 0으로 나누기 오류가 발생할 수 있는 원래 쿼리와 달리 NULL 값을 적절하게 처리합니다. .

소수점 보존 숫자

결과에서 소수점 이하 자릿수를 유지하려면 쿼리를 다음과 같이 수정하세요.

SELECT property_name
      ,round((count(value_a = value_b OR NULL) * 100.0) / count(*), 2) AS pct
FROM   my_obj
GROUP  BY 1;
로그인 후 복사

이 변경에서는 분자에 100.0을 곱하여 숫자 정밀도를 적용한 다음 round()를 사용합니다. 소수점 이하 자릿수를 지정하려면 보존됩니다.

결론

간단한 쿼리 또는 소수 보존이 포함된 수정된 쿼리를 사용하면 동일한 SELECT 문 내에서 SUM()의 백분율을 효과적으로 계산할 수 있습니다. NULL 값을 적절하게 사용하세요.

위 내용은 단일 SQL SELECT 문의 COUNT()에서 백분율을 효율적으로 계산하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿