내 테이블에서 남성과 여성의 비율을 계산하려고합니다. 지금까지 내 테이블에서 여성, 남성 및 비공개의 총 수를 계산했습니다. 하지만이 합계에서 여성과 남성의 비율을 계산하고 싶습니다.
내 초기 쿼리는 다음과 같습니다.
SELECT [description] AS [Gender] ,
COUNT(C.id) AS [GenderCount]
FROM dbo.Customers AS [C]
INNER JOIN dbo.GenderTypes AS [GT] ON C.genderTypeID = GT.id
WHERE C.customerStatusTypeID = 'O'
GROUP BY GT.[description]
결과 :
Gender GenderCount
Female 60620
Male 394165
Undisclosed 630007
case 문을 사용하여 백분율을 계산하기 위해 CTE에서 쿼리를 래핑하려고 시도했지만 여성, 남성 및 비공개가 모두 100 %이기 때문에 분명히 뭔가 누락되었습니다.
;WITH Gender (Gender, GenderCount)
AS
(
SELECT [description] AS [Gender] ,
COUNT(C.id) AS [GenderCount]
FROM dbo.Customers AS [C]
INNER JOIN dbo.GenderTypes AS [GT] ON C.genderTypeID = GT.id
WHERE C.customerStatusTypeID = 'O'
GROUP BY GT.[description] )
SELECT Gender.Gender, Gender.GenderCount,
CASE WHEN
Gender.Gender = 'Female' THEN Gender.GenderCount / SUM(Gender.GenderCount) * 100
WHEN Gender.Gender = 'Male' THEN Gender.GenderCount / SUM(Gender.GenderCount) * 100
ELSE Gender.GenderCount / SUM(Gender.GenderCount) * 100
END AS [%Gender]
FROM Gender
GROUP BY Gender.Gender, Gender.GenderCount;
결과는 다음과 같습니다.
Gender GenderCount %Gender
Female 60620 100
Male 394165 100
Undisclosed 630007 100
내 수학 / TSQL이 올바른 경우 결과는 다음과 같습니다.
Female: 5.59%
Male: 36.34%
Undisclosed: 58.08%
누구든지 올바른 결과를 얻기 위해 내가 놓친 것에 대해 나를 도울 수 있습니까?
다음 쿼리를 사용할 수 있습니다.
DECLARE @SampleData AS TABLE
(
Gender varchar(20),
GenderCount int
)
INSERT INTO @SampleData
VALUES
('Female', 60620),
('Male', 394165),
('Undisclosed', 630007)
SELECT *,
CAST(CAST(sd.GenderCount AS decimal)/sum(sd.GenderCount) over() *100 as decimal(10,2)) AS [%Gender] AS [%Gender]
FROM @SampleData sd
보고
Gender GenderCount %Gender
Female 60620 5.59
Male 394165 36.34
Undisclosed 630007 58.08
다음과 같이 쿼리를 작성할 수 있습니다.
;WITH temp as (
SELECT [description] AS [Gender] ,
COUNT(C.id) AS [GenderCount]
FROM dbo.Customers AS [C]
INNER JOIN dbo.GenderTypes AS [GT] ON C.genderTypeID = GT.id
WHERE C.customerStatusTypeID = 'O'
GROUP BY GT.[description]
)
SELECT *,
CAST(CAST(t.GenderCount AS decimal)/sum(t.GenderCount) over() *100 as decimal(10,2)) AS [%Gender]
FROM temp t
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다