2011-11-13 51 views
0

值我有一個這樣的表:SQL查詢來獲取這似乎是最每個類別

Category Reply 
---------+---------------+ 
M    1     
F    2     
M    1     
M    3    
M    1     
M    3     
F    2     
F    1     
F    2    
F    5 
F    2 

我正在尋找一個SQL查詢返回的結果如下:

Category Total Number Best Reply   Number 
---------+---------------+------------------+---------------+ 
M    5     1     3 
F    6     2     4 

總數:該類別的出現次數(我知道如何得到這個)

最佳回覆:這是個選擇的批覆Ë最該類別

號碼:「最好的回覆」被選爲

+1

什麼數據庫版? –

+0

我正在使用OleDb連接從Excel工作表中獲取數據。但我使用正常的SQL查詢,他們工作 – Youssef

回答

1

你不指定數據庫的時間數,所以我避免使用通用表格表達式可以使這個更清晰。它仍然可以清理一下。我做了我的SQL Server上工作2008

select rsTotalRepliesByCategory.Category, 
     TotalRepliesByCategory, 
     rsCategoryReplyCount.Reply, 
     rsMaxReplies.MaxReplies 
from 
(
    --calc total replies 
    select Category, COUNT(*) as TotalRepliesByCategory 
    from CategoryReply 
    group by Category 
) rsTotalRepliesByCategory 
INNER JOIN 
(
    --calc number of replies by category and reply 
    select Category, Reply, COUNT(*) as CategoryReplyCount 
    from CategoryReply 
    group by Category, Reply 
) rsCategoryReplyCount on rsCategoryReplyCount.Category = rsTotalRepliesByCategory.Category 
INNER JOIN 
(
    --calc the max replies 
    select Category, MAX(CategoryReplyCount) as MaxReplies 
    from 
    (
     select Category, Reply, COUNT(*) as CategoryReplyCount 
     from CategoryReply 
     group by Category, Reply 
    ) rsCategoryReplyCount2 
    group by Category 
) rsMaxReplies on rsMaxReplies.Category = rsTotalRepliesByCategory.Category and rsMaxReplies.MaxReplies = rsCategoryReplyCount.CategoryReplyCount 

這裏是我以前玩的這個設置:

create table CategoryReply 
(
    Category char(1), 
    Reply int 
) 

insert into CategoryReply values ('M',1) 
insert into CategoryReply values ('F',2) 
insert into CategoryReply values ('M',1) 
insert into CategoryReply values ('M',3) 
insert into CategoryReply values ('M',1) 
insert into CategoryReply values ('M',3) 
insert into CategoryReply values ('F',2) 
insert into CategoryReply values ('F',1)     
insert into CategoryReply values ('F',2) 
insert into CategoryReply values ('F',5) 
insert into CategoryReply values ('F',2) 

最後,輸出:

Category TotalRepliesByCategory Reply MaxReplies 
F 6 2 4 
M 5 1 3 
0
SELECT Category, TotalNumber, Row_Number() over (order by TotalNumber) 
FROM(

    SELECT Category, Sum(Reply) as TotalNumber, Count(Reply) as Number 
    From Table 
    Group By Category) as temp 

將是類似的東西

+0

你可以在OVER子句中使用聚合函數嗎? –

+0

是啊不知道你可以這樣,爲什麼我編輯並添加了子選擇 – GregM

+0

嗨,感謝您的回覆,但我需要它只顯示出現最多的回覆。你的查詢做到了嗎? – Youssef