2015-04-18 73 views
1

例如排序後使用像sum和avg上除了前幾排整列的聚合函數,我的表是這樣的:如何在德比

+---------------------+ 
| TOTAL NUMBER NAME | 
+---------------------+ 
| 7   3  A | 
| 7   3  B | 
| 10  5  A | 
| 11  5  B | 
| 5   8  A | 
| 5   8  B | 
| 21  32  A | 
| 21  32  B | 
+---------------------+ 

+---------------------+ 
| TOTAL NUMBER NAME | 
+---------------------+ 
| 10  5  A | 
| 5   8  A | 
| 21  32  A | 
| 7   3  A | 
| 7   3  B | 
| 11  5  B | 
| 5   8  B | 
| 21  32  B | 
+---------------------+ 

通過NUMBER排序後

我只希望總各組分組的前兩行的每一個人的姓名和:

A 7+10=17 
B 7+11=18 

回答

1

這將是事端g像:

select sum(total),name from 
(select Total, name from 
table order by number where name = 'A' FETCH FIRST 2 ROWS ONLY 
union select Total, name from 
table order by number where name = 'B' FETCH FIRST 2 ROWS ONLY)dt group by name 

在派生表頂部2結果將按列號排序,外部查詢將添加總值。

編輯:下面的查詢應該做你的工作。

SELECT name,sum(total) 
FROM table s 
WHERE 
     (
      SELECT COUNT(*) 
      FROM table t 
      WHERE t.name = s.name AND 
        t.number >= s.number 
     ) <= 2 
group by name; 
+0

我使用德比,對不起我的不適當的例子。請等一分鐘。 –

+0

好了更新了答案。 – user2407394

+0

但是我有400多個不同的名字......是用循環來生成一個語句的唯一方法來實現這個嗎? –