簡體   English   中英

計算數據庫SQL中的平均值

[英]Calculate Average in Database SQL

我需要得到平均值,舍入到2個小數點,兩個日期的差異。

使用Entity Framework Core我使用了以下內容:

var average = await games
  .Where(x => x.Finish.HasValue)
  .AverageAsync(x => Math.Round((x.Finish.Value - x.Start).TotalDays, 2));

這似乎是在內存中運行。

如何計算數據庫的平均值(SQL)?

問題不是Average ,而是時間跨度計算 - 當前EF Core(2.x)不支持時間跨度計算的通用SQL轉換。

對於SqlServer,您可以使用EF Core 2.1中引入的一些DateDiff方法。 所有它們都返回int值,因此您不能直接使用DateDiffDay來獲得TimeSpan.TotalDays的等價物,但您可以使用DateDiffHour / 24dDateDiffMinute / (24d * 60)等來模擬它。

例如,

var average = await games
    .Where(x => x.Finish.HasValue)
    .AverageAsync(x => Math.Round(EF.Functions.DateDiffHour(x.Start, x.Finish.Value) / 24d, 2));

翻譯成

  SELECT AVG(ROUND(DATEDIFF(HOUR, [x].[Start], [x].[Finish]) / 24.0E0, 2))
  FROM [Game] AS [x]
  WHERE [x].[Finish] IS NOT NULL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM