我有一個名爲author with authorId(PK),firstname的表。第二個表名爲ArticleID(PK),articleTitle,articleText,authorId(FK),categoryId(FK)。用categryId(PK)categoryText命名的第三個表。按類別計算記錄百分比
如何獲取作者使用sql編寫的特定類別文本的文章百分比?
我有一個名爲author with authorId(PK),firstname的表。第二個表名爲ArticleID(PK),articleTitle,articleText,authorId(FK),categoryId(FK)。用categryId(PK)categoryText命名的第三個表。按類別計算記錄百分比
如何獲取作者使用sql編寫的特定類別文本的文章百分比?
使用select
和groupby
和集合函數稱爲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
感謝您的快速回復 – kanth
我們需要看到從你身邊一些努力纔可以的答案跳躍英寸 –
您正在使用哪些DBMS? Postgres的?甲骨文? –
ErikE到現在爲止,我想到的是創建一個查詢:從文章中選擇count(文章),但我不知道如何設置WHERE以便「連接」表(文章和類別)並指定我需要一個特定的類別。 – kanth