2017-08-03 7 views
0

各マスタジョブタイトルの基本給の数、最小値、最大値、およびパーセンタイル(10,25,50,75,90)を取得しようとしています。SQL Server:Min/Max/Percentiles

enter image description here

私は次のエラーを取得しています:

Msg 8120, Level 16, State 1, Line 1
Column 'dbo.ps_employee.Base' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

+3

PERCENTILE_DISC COUNT/MIN/MAX/AVG(列)のような集計関数ではありません。この例外は、このファンクションで使用され、GROUPには使用されない列によって生成されます(e.base)。最も単純なソリューションは、別のクエリを作成して百分位数を計算することです。 –

+0

(ORDER BY e.base)を削除するとビジネスロジックが変更されますか? –

+0

いいえ、私はORDER BYがPERCENTILE_DISC関数で必要と考えましたか? – gattoun

答えて

0

以下のクエリを使用してパーセンタイルを得ることができました。私はカウント/分/最大/平均のために別のものを使用しました。

SELECT DISTINCT mj.title, PERCENTILE_DISC(.1) WITHIN GROUP (ORDER BY e.base) 
OVER (PARTITION BY mj.title) AS '10th', PERCENTILE_DISC(.25) WITHIN GROUP (ORDER 
BY e.base) OVER (PARTITION BY mj.title) AS '25th', PERCENTILE_DISC(.5) WITHIN 
GROUP (ORDER BY e.base) OVER (PARTITION BY mj.title) AS '50th', 
PERCENTILE_DISC(.75) WITHIN GROUP (ORDER BY e.base) OVER (PARTITION BY mj.title) 
AS '75th', PERCENTILE_DISC(.9) WITHIN GROUP (ORDER BY e.base) OVER (PARTITION BY 
mj.title) AS '90th' FROM dbo.ps_employee e FULL OUTER JOIN dbo.ps_jobs j on 
e.title = j.job FULL OUTER JOIN dbo.ps_masterjobs mj 
ON j.masterID = mj.ID;