2017-01-26 12 views
1

MAXでMAXの最大値を選択することは可能ですが、IDと値の2つの列を持つテーブルがある場合は選択できます各IDの値の上位10%各IDには設定された数の値はありません。SQLで値の上位10%を選択する方法

編集:私はMicrosoft SQL Server管理スタジオで働いています。 私はMicrosoft SQL Server管理スタジオで働いています。それは私が選択を生成したいそれぞれの上位50%を選択した場合

ID,  Value 
112345, 1 
112345, 2 
112345, 3 
112345, 2 
112345, 3 
112345, 18 
112345, 32 
112357, 10 
112346, 15 
112346, 16 

ID,  Value 
112345, 3 
112345, 3 
112345, 18 
112345, 32 
112357, 10 
112346, 16 

を返される行数を切り上げた場合、私は希望表Aは次のようになります例えば、 4行を持っていたIDの10%はまだあなたが値(DESC)が注文した行の最初の10%をしたいと仮定すると、1つの値

+2

トップ10%に基づいて何ですか?サンプルデータと期待される出力を投稿できますか?また、どのデータベースを使用していますか? SQLはちょうど標準です – GurV

+2

あなたは 'value'またはレコード総数の上位10%で上位10%を求めていますか? – Siyual

+0

[how-to-ask](http://stackoverflow.com/help/how-to-ask)をご覧ください – swe

答えて

3

を返します、あなたは、ウィンドウ関数を使用してそれを達成することができます

select * from (
select ID, Value, COUNT(*) over (partition by ID) as countrows, ROW_NUMBER() over (partition by ID order by Value desc) as rowno from mytable) as innertab 
where rowno <= floor(countrows*0.1+0.9) 
order by ID, rowno 

フロアは1行10行、2行11行〜20行など1行になります。

+0

最後にあなたはparentidによって注文しますが、それはあなたの答えに定義されていません。これはIDだけでしょうか? –

+0

@JoshuaKidd sry、私は私のテーブルで、親子があったところでテストしました。その後、私は名前に変わり、忘れました。私は私の答えを訂正した。 – swe

0

別の方法としては、TOPを適用し、指定CROSSを使用することができ、N PERCENT

SELECT x.* 
FROM (SELECT DISTINCT ID FROM tab) a 
    CROSS APPLY (SELECT TOP 10 PERCENT ID, Value FROM tab b WHERE b.ID = a.ID) x 

上位Nパーセントが少なくとも一つの列を生成します。

関連する問題