2014-01-27 25 views
1

是否可以構建SQL查詢以僅輸出n行並總結返回的第n + 1行的其餘列。MySQL僅輸出n行並將其餘行分組到第n + 1行

例如,我有兩個從sql查詢返回的列。第一列是名稱,第二列包含計數值。名字是不同的,計數是數字。

該查詢應該只返回3行,如果超過3行,它們應該總結爲第四行,名稱爲「其他」,其餘行的計數總結爲第四行。

請幫助我。提前致謝。

(例如)

名稱|價值
首先 - 12
二 - 11
三 - 9
四 - 15
五 - 13
六 - 8

查詢結果
名稱|價值
首先 - 12
二 - 11
三 - 9個
其他 - 36

+0

上嘗試它的任何現有的研究? –

+0

是否有理由認爲它只是一個查詢?我可以做到,但對於2個查詢中基本非常簡單的事情來說,它有點笨拙。 – Wrikken

+0

一切都很好。有臨時表的兩個查詢也可以。我只是想要一個大概的想法如何實現。謝謝 – pragaas

回答

0

我相信它會看起來像:

SELECT DISTINCT TOP 3 Col1, Col2 
FROM Table 

除非你希望有第二列計數的東西,那麼它將是

SELECT DISTINCT TOP 3 Col1, Count(Col2) AS "New Name" 
FROM Table 
GROUP BY Col1 

這是聯合國明鏡假設你只想頂部3.如果你想有一個4行,做一個UNION與使用偏移另一個select語句,這樣你可以選擇所有的行,但前3名。

herehere,並且在TOP,OFFSET和UNION上的示例爲here

重新閱讀您的問題的第一部分,如果您希望更改TOP數字,您很可能需要將其作爲存儲過程,並通過一個變量來控制TOP和OFFSET的編號。以this作爲參考。

0

嘗試GROUP BY...WITH ROLLUP將所有行計算在n + 1行中。嘗試下面的例子。

SELECT IFNULL(a.id, 'Other'), SUM(1) ids 
FROM tableA 
GROUP BY a.id WITH ROLLUP 
0
Could you try something like this : 

select case(name) 
    when 'First' THEN 'First' 
    when 'Second' THEN 'Second' 
    when 'Third' THEN 'Third' 
    else 'Others' 
end name, sum(value) value 
from table 
group by case(name) 
    when 'First' THEN 'First' 
    when 'Second' THEN 'Second' 
    when 'Third' THEN 'Third' 
    else 'Others'