>데이터 베이스 >MySQL 튜토리얼 >가능한 모든 성적을 미리 정의하지 않고 SQL에서 성적 백분율을 어떻게 계산할 수 있습니까?

가능한 모든 성적을 미리 정의하지 않고 SQL에서 성적 백분율을 어떻게 계산할 수 있습니까?

DDD
DDD원래의
2025-01-17 04:06:10227검색

How Can I Calculate Grade Percentages in SQL Without Predefining All Possible Grades?

SQL 문의 백분율 계산

질문:

SQL Server 테이블에 사용자가 포함되어 있습니다. 이름과 등급. 단일 SQL 문으로 가능한 모든 성적 값(예: A, B, C)의 백분율을 어떻게 계산할 수 있습니까? 또한, 사용자가 '합격/불합격' 또는 '없음'과 같은 개방형 응답을 입력할 수 있다는 점을 고려하면 가능한 모든 성적을 명시적으로 정의하지 않고도 이를 달성할 수 있습니까?

답변:

옵션 1: 사용 over()

select Grade, count(*) * 100.0 / sum(count(*)) over()
from MyTable
group by Grade

이 솔루션은 가장 효율적이며 over() 함수를 활용합니다.

옵션 2: 범용(모든 SQL 버전)

select Grade, count(*) * 100.0 / (select count(*) from MyTable)
from MyTable
group by Grade;

이 옵션은 모든 SQL 버전에서 작동하지만 이전 옵션보다 효율성이 떨어질 수 있습니다.

옵션 3: CTE 사용(최소 효율성)

with t(Grade, GradeCount) 
as 
( 
    select Grade, count(*) 
    from MyTable
    group by Grade
)
select Grade, GradeCount * 100.0/(select sum(GradeCount) from t)
from t;

이 방법은 유연한 솔루션을 제공하지만 효율성은 가장 낮습니다.

위 내용은 가능한 모든 성적을 미리 정의하지 않고 SQL에서 성적 백분율을 어떻게 계산할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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