亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

函數計算SQLServer中的中位數

函數計算SQLServer中的中位數

智慧大石 2019-06-25 17:14:18
函數計算SQLServer中的中位數根據MSDN,中位數在Transact-SQL中不能作為聚合函數使用。但是,我想知道是否可以創建此功能(使用創建聚合函數、用戶定義函數或其他方法)。最好的方法(如果可能的話)是什么?允許在聚合查詢中計算中值(假設是數字數據類型)?
查看完整描述

3 回答

?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

有很多方法可以做到這一點,而且性能有很大的變化。這里有一個特別優化的解決方案,來自中介、行號和性能..當涉及到在執行過程中生成的實際I/O時,這是一個特別優化的解決方案-它看起來比其他解決方案花費更高,但它實際上要快得多。

該頁面還包含其他解決方案和性能測試細節的討論。注意,在中間列的值相同的多行情況下,使用唯一列作為消歧器。

與所有數據庫性能場景一樣,始終嘗試使用真實硬件上的真實數據測試解決方案-您永遠不知道對SQLServer優化器的更改或您環境中的特性何時會使一個通??焖俚慕鉀Q方案變得更慢。

SELECT
   CustomerId,
   AVG(TotalDue)FROM(
   SELECT
      CustomerId,
      TotalDue,
      -- SalesOrderId in the ORDER BY is a disambiguator to break ties
      ROW_NUMBER() OVER (
         PARTITION BY CustomerId         ORDER BY TotalDue ASC, SalesOrderId ASC) AS RowAsc,
      ROW_NUMBER() OVER (
         PARTITION BY CustomerId         ORDER BY TotalDue DESC, SalesOrderId DESC) AS RowDesc   FROM Sales.SalesOrderHeader SOH) xWHERE
   RowAsc IN (RowDesc, RowDesc - 1, RowDesc + 1)GROUP BY CustomerIdORDER BY CustomerId;


查看完整回答
反對 回復 2019-06-25
?
子衿沉夜

TA貢獻1828條經驗 獲得超3個贊

如果您使用的是SQL 2005或更高版本,那么對于表中的單個列來說,這是一個很好的、簡單的中值計算:

SELECT(
 (SELECT MAX(Score) FROM
   (SELECT TOP 50 PERCENT Score FROM Posts ORDER BY Score) AS BottomHalf)
 +
 (SELECT MIN(Score) FROM
   (SELECT TOP 50 PERCENT Score FROM Posts ORDER BY Score DESC) AS TopHalf)) / 2 AS Median


查看完整回答
反對 回復 2019-06-25
  • 3 回答
  • 0 關注
  • 2243 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號