首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 3.0 入門系列(九):GroupBy 彙總函數應用——Count、Max、Min、Average、Sum 與 Having 條件

     編輯:關於C語言

常見彙總函數用法

在 select 中對群組 g 呼叫彙總方法,只回傳統計結果而非完整明細,SQL 轉譯為單一 GROUP BY 查詢,效能極佳。

各類產品數量

var q = from p in db.Products
        group p by p.CategoryID into g
        select new { g.Key, NumProducts = g.Count() };

各類產品中停產商品數量(Lambda 條件)

var q = from p in db.Products
        group p by p.CategoryID into g
        select new { g.Key, NumProducts = g.Count(p => p.Discontinued) };

Count(predicate) 中的 p 代表群組內的單一產品元素。

各類產品最高/最低/平均/總價格

// 最高價
select new { g.Key, MaxPrice = g.Max(p => p.UnitPrice) }

// 最低價
select new { g.Key, MinPrice = g.Min(p => p.UnitPrice) }

// 平均價
select new { g.Key, AveragePrice = g.Average(p => p.UnitPrice) }

// 價格總和
select new { g.Key, TotalPrice = g.Sum(p => p.UnitPrice) }

執行時 LINQ to SQL 僅發送彙總 SQL,不載入明細資料(參考上篇 SQL 觀察)。

Having 條件:過濾群組

var q = from p in db.Products
        group p by p.CategoryID into g
        where g.Count() >= 10
        select new { g.Key, ProductCount = g.Count() };

轉譯 SQL 會在外層包裝子查詢:

SELECT [t1].[CategoryID], [t1].[value2] AS [ProductCount]
FROM (
    SELECT COUNT(*) AS [value], COUNT(*) AS [value2], [t0].[CategoryID]
    FROM [dbo].[Products] AS [t0]
    GROUP BY [t0].[CategoryID]
) AS [t1]
WHERE [t1].[value] >= @p0  -- @p0 = 10
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved