2015-01-08 154 views
-4

我有一個名爲author with authorId(PK),firstname的表。第二個表名爲ArticleID(PK),articleTitle,articleText,authorId(FK),categoryId(FK)。用categryId(PK)categoryText命名的第三個表。按類別計算記錄百分比

如何獲取作者使用sql編寫的特定類別文本的文章百分比?

+1

我們需要看到從你身邊一些努力纔可以的答案跳躍英寸 –

+0

您正在使用哪些DBMS? Postgres的?甲骨文? –

+0

ErikE到現在爲止,我想到的是創建一個查詢:從文章中選擇count(文章),但我不知道如何設置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中是可以的。但是,它會運行兩次聚合(一次爲計數,一次爲alllcount)。 '總賬'並不是真的有必要。既然你已經計算好了,你可能想要計算視圖中的總數和百分比。

編輯:同樣的甚至更短

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

感謝您的快速回復 – kanth