我有這樣一個示例表:如何從每組中選擇TOP 5 PERCENT?
CREATE TABLE #TEMP(Category VARCHAR(100), Name VARCHAR(100))
INSERT INTO #TEMP VALUES('A', 'John')
INSERT INTO #TEMP VALUES('A', 'John')
INSERT INTO #TEMP VALUES('A', 'John')
INSERT INTO #TEMP VALUES('A', 'John')
INSERT INTO #TEMP VALUES('A', 'John')
INSERT INTO #TEMP VALUES('A', 'John')
INSERT INTO #TEMP VALUES('A', 'Adam')
INSERT INTO #TEMP VALUES('A', 'Adam')
INSERT INTO #TEMP VALUES('A', 'Adam')
INSERT INTO #TEMP VALUES('A', 'Adam')
INSERT INTO #TEMP VALUES('A', 'Lisa')
INSERT INTO #TEMP VALUES('A', 'Lisa')
INSERT INTO #TEMP VALUES('A', 'Bucky')
INSERT INTO #TEMP VALUES('B', 'Lily')
INSERT INTO #TEMP VALUES('B', 'Lily')
INSERT INTO #TEMP VALUES('B', 'Lily')
INSERT INTO #TEMP VALUES('B', 'Lily')
INSERT INTO #TEMP VALUES('B', 'Lily')
INSERT INTO #TEMP VALUES('B', 'Tom')
INSERT INTO #TEMP VALUES('B', 'Tom')
INSERT INTO #TEMP VALUES('B', 'Tom')
INSERT INTO #TEMP VALUES('B', 'Tom')
INSERT INTO #TEMP VALUES('B', 'Ross')
INSERT INTO #TEMP VALUES('B', 'Ross')
INSERT INTO #TEMP VALUES('B', 'Ross')
SELECT Category, Name, COUNT(Name) Total
FROM #TEMP
GROUP BY Category, Name
ORDER BY Category, Total DESC
DROP TABLE #TEMP
給了我下面的:
A John 6
A Adam 4
A Lisa 2
A Bucky 1
B Lily 5
B Tom 4
B Ross 3
現在,如何從每個類別假設每個類別選擇TOP 5 PERCENT
記錄有100多條記錄(這裏沒有在樣品表中顯示)?舉例來說,在我實際的表,它應該(再次,我在這裏沒有顯示完整的表)中刪除從A
的John
記錄和Lily
記錄從B
酌情獲得:
A Adam 4
A Lisa 2
A Bucky 1
B Tom 4
B Ross 3
我一直在努力使用CTE
s和PARTITION BY
子句,但似乎無法實現我想要的。它從整體結果中排除TOP 5 PERCENT,但不是從每個類別中排除。有什麼建議麼?
可能對你有幫助 - 如果你有一個組的計數,請記住5%將是「row_num <=(5 * count)/ 100」 –
@KierenJohnstone:+1謝謝。我知道我可能不得不使用CROSS APPLY或類似的東西,但仍然有一些麻煩。如果我知道它會更新。 – Legend
請問您需要輸出什麼?刪除前5%的比例與6的比例非常小。一行(A,John)爲16%。 – gbn