मानक विचलन की गणना करने के लिए, आपको सभी तत्वों के माध्यम से पुनरावृति करने की आवश्यकता है, इसलिए इसे एक प्रश्न में करना असंभव होगा। आलसी तरीका यह होगा कि इसे केवल दो चरणों में किया जाए:
DECLARE
@Avg int,
@StDev int
SELECT @Avg = AVG(Sales), @StDev = STDEV(Sales)
FROM tbl_sales
WHERE ...
SELECT AVG(Sales) AS AvgSales, MAX(Sales) AS MaxSales, MIN(Sales) AS MinSales
FROM tbl_sales
WHERE ...
AND Sales >= @Avg - @StDev * 3
AND Sales <= @Avg + @StDev * 3
एक और आसान विकल्प जो हो सकता है काम (वैज्ञानिक डेटा के विश्लेषण में काफी सामान्य) केवल न्यूनतम और अधिकतम x को छोड़ना होगा मान, जो काम करता है यदि आपके पास संसाधित करने के लिए बहुत अधिक डेटा है। आप ROW_NUMBER
का उपयोग कर सकते हैं इसे एक कथन में करने के लिए:
WITH OrderedValues AS
(
SELECT
Sales,
ROW_NUMBER() OVER (ORDER BY Sales) AS RowNumAsc,
ROW_NUMBER() OVER (ORDER BY Sales DESC) AS RowNumDesc
)
SELECT ...
FROM tbl_sales
WHERE ...
AND Sales >
(
SELECT MAX(Sales)
FROM OrderedValues
WHERE RowNumAsc <= @ElementsToDiscard
)
AND Sales <
(
SELECT MIN(Sales)
FROM OrderedValues
WHERE RowNumDesc <= @ElementsToDiscard
)
ROW_NUMBER
बदलें RANK
के साथ या DENSE_RANK
यदि आप अद्वितीय . की एक निश्चित संख्या को त्यागना चाहते हैं मान।
इन सरल तरकीबों से परे आप कुछ बहुत भारी आँकड़ों में शामिल होना शुरू करते हैं। मुझे इसी तरह के सत्यापन से निपटना है और यह SO पोस्ट के लिए बहुत अधिक सामग्री है। एक सौ अलग-अलग एल्गोरिदम हैं जिन्हें आप एक दर्जन अलग-अलग तरीकों से बदल सकते हैं। यदि संभव हो तो मैं इसे सरल रखने की कोशिश करूंगा!