2009-12-29 4 views
1

Uniuque "Reasons", 그 수 및 존재하는 수의 백분율을 표시하려는 결과를 얻으려고합니다. 지금까지 내가 가지고있다SQL에 컬럼이있는 결과의 백분율

SELECT DISTINCT Reason, 
     COUNT(Reason) AS Number, 
     CAST(COUNT(Reason) AS float)/CAST(COUNT(*) AS float) AS percentage 
FROM DeletedClients 

그러나 나는 COUNT (*)와 COUNT (Reason)에서 같은 결과를 발견했다. 그래서 내 기본적인 질문입니다, 내가 어떻게 쿼리의 별개를 사용하고 때 행의 총 개수를 어떻게해야합니까? SQL 서버 2005를 사용 중입니다.

+1

SQL 공급 업체 이것은 당신이 옳은 것 –

답변

4
SELECT Reason, 
     COUNT(Reason) AS Number, 
     CAST(COUNT(Reason) AS float)/CAST(t.Total AS float) AS percentage 
FROM DeletedClients, 
    (SELECT COUNT(*) As Total FROM DeletedClients) t 
GROUP BY Reason, Total 
0
select reason, count(reason), 
     (count(reason)::float/(select count(reason) from reasons)::float) * 100 
     as percent 
from DeletedClients group by reason order by reason; 

이것은 내가 생각해 낸 것입니다. 나는 postgresql 특정 방식으로 캐스팅을했지만 필요에 맞게 조정할 수 있습니다. 그룹별로 사용해야합니다. 나는 그것을 좋아해서에 의해 순서를 추가 : P

0

난 당신이에 의해 그룹을 사용한다고 생각 :


SELECT Reason, 
     COUNT(Reason) AS Number, 
     CAST(COUNT(Reason) AS float)/CAST(COUNT(*) AS float) AS percentage 
FROM DeletedClients 
GROUP BY Reason 
+1

내 나쁜 –

+0

모든 행 (SQL 서버)에 대한 1의 비율 결과 –

1

사용 : 그대로

SELECT x.reason, 
     x.num AS NUMBER, 
     CONVERT(x.num, float)/(SELECT CONVERT(COUNT(*), float) FROM DELETEDCLIENTS) AS PERCENTAGE 
    FROM (SELECT t.reason, 
       COUNT(*) 'num' 
      FROM DELETEDCLIENTS t 
     GROUP BY t.reason) x 
+0

을이 모든 행에 대한 백분율로 0을 제공합니다 –

+0

@Brian : 올바른 정수 수학. 수정 됨. –

0

조회에 문제가있는 것입니다. 그룹이 없습니다 (Reason 열을 반환하려면

목표는 COUNT (및 다른 집계)가 null을 무시하므로 (SQL Server를 최소한 사용하는 경우) 작동합니다 :..

DECLARE @TOTAL FLOAT 
SELECT @TOTAL = COUNT(1) 
FROM DeletedClients 

SELECT DISTINCT 
    Reason, 
    Cnt AS Number, 
    @TOTAL AS TotalRecords, 
    CAST(Cnt AS float)/@TOTAL AS percentage 
FROM (
    SELECT 
     Reason, 
     COUNT(*) AS Cnt 
    FROM DeletedClients 
    GROUP BY Reason 
) t 
GROUP BY 
    Reason, 
    Cnt