這裡groupby的操作相對難理解些,主要原因,它包含了整個分組的具體信息,而不是簡單的求和,取平均值等。如果在最終結果中,也就是在select語句中,不包含g的全部信息,而只是g的聚合函數。又會是怎麼樣的一番風景呢?
GroupBy中的Max, Min, Sum, Average,Count
如果,只想取每類產品中,單價為最大,用T-sql該怎麼辦呢?是不是要這麼來寫
SELECT MAX([t0].[UnitPrice]) AS [MaxPrice], [t0].[CategoryID]
FROM [dbo].[Products] AS [t0]
GROUP BY [t0].[CategoryID]
我們來看看,dlinq如何來做同樣的事情.如下,先按CategoryID歸類,然後,只取CategoryID值和同類產品中單價最大的。
var q =
from p in db.Products
group p by p.CategoryID into g
select new {
g.Key,
MaxPrice = g.Max(p => p.UnitPrice)
};
在這裡,Max函數只對每個分組進行操作。我們來看看其結果
呀,這次,dlinq並沒有把組裡所有的紀錄都取出來的嗎。(請參考http://www.cnblogs.com/126/archive/2006/09/01/486388.Html一文中的方法,配置sample.) dlinq只是簡單做了統計,並返回結果。
每類產品中,單價為最小的,
var q =
from p in db.Products
group p by p.CategoryID into g
select new {
g.Key,
MinPrice = g.Min(p => p.UnitPrice)
};
每類產品的價格平均值
var q =
from p in db.Products
group p by p.CategoryID into g
select new {
g.Key,
AveragePrice = g.Average(p => p.UnitPrice)
};
每類產品,價格之和
var q =
from p in db.Products
group p by p.CategoryID into g
select new {
g.Key,
TotalPrice = g.Sum(p => p.UnitPrice)
};