2015-01-08 5 views
-4

저자 이름이 author이고 이름이 firstname 인 테이블이 있습니다. articleID (PK), articleTitle, articleText, authorId (FK), categoryId (FK)라는 article이라는 두 번째 테이블. categyId (PK), categoryText가있는 category라는 세 번째 테이블.범주별로 레코드 백분율을 계산하십시오.

작성자가 sql을 사용하여 작성한 특정 categoriesText의 기사 백분율을 얻는 방법은 무엇입니까?

+1

도 짧아. –

+0

어떤 DBMS를 사용하고 있습니까? 포스트그레스? 신탁? –

+0

ErikE 지금까지 내가 염두에두고있는 것은 쿼리를 작성하는 것입니다. 기사에서 count (articles)를 선택하지만 테이블 (기사 및 카테고리)을 "연결"하기 위해 WHERE를 설정하는 방법을 모르며 나는 어떤 범주가 필요하다. – kanth

답변

0

selectgroupby을 사용하고 count이라는 집계 함수를 사용하십시오. 당신은 이미 알고있을 것입니다. %은 "히트 수"를 "모든 것"수로 나눈 값입니다 (가독성을 위해 100 번). 같은

따라서, 그 두 쿼리의 스케치가 보일 것이다

Select count(*) from FooTable; 

다음 @totalCount 같은 몇 가지 변수에 결과를 작성하고

-- watch out for the division; the value divided must be floating-point or you'll get all zeroes 
Select categoryName, 100.0*count(*)/@totalCount 
from FooTable 
group by categoryName 

당신의 SQL 언어를 허용하는 경우 및 경우 원하는대로 다음과 같이 하나의 쿼리로 함께 묶을 수 있습니다.

select categoryName, 100.0*hits/allcount 
from 
(
    Select 
     categoryName, 
     count(*) as hits 
    from FooTable 
    group by categoryName 
) as subq 
cross join 
(
    Select 
     count(*) as allcount 
    from FooTable 
) as allstats 

MsSqlServer의 t-SQL에서 OK입니다. 그러나 집계는 두 번 실행됩니다 (한 번은 방문수, 한 번은 alllcount). 'allcount'는 실제로 필요하지 않습니다. 조회수가 발생하면 조회수에서 총 횟수와 비율을 계산할 수 있습니다.

편집 : 같은 우리는 우리가 답으로 이동할 수 있습니다 전에 측면에서 어떤 노력을 볼 필요가

Select 
    categoryName, 
    count(*) * 100.0/(Select count(*) as allcount from FooTable) 
from FooTable 
group by categoryName 
+0

QUICK ANSWER에 감사드립니다. – kanth

관련 문제