MicroOrm.Net(7) Table.Query() - Group By & Having
MicroOrm.Net主頁:
http://code.google.com/p/micro-orm-net/
MicroOrm.Net系列隨便目錄總覽:
http://www.rzrgm.cn/mapserver/archive/2012/04/07/2436129.html
本文我們來講解MicroOrm.Net的Group By和Having的用法,請看Group By的api:
Query GroupBy(params Column[] columns)
方法的參數(shù)只有Column集合這一種類型,用法很簡單,請看下面的代碼:
db.OrderDetail.Query()
.GroupBy(db.OrderDetail.ProductId)
熟悉SQL的同學(xué)都知道,在Group By和Select配合使用的時候,出現(xiàn)在Group By子句中的Column可以被直接Select,沒有出現(xiàn)在Group By子句中的Column必須經(jīng)過聚合后才能被Select
db.OrderDetail.Query()
.GroupBy(db.OrderDetail.ProductId)
.Select(db.OrderDetail.OrderId)
上面的代碼將會出錯,因為Select子句里的OrderDetail.OrderId未出現(xiàn)在Group By子句中,同時也沒有被聚合。
上面的代碼等價于如下的SQL:
select OrderId from OrderDetail group by ProductId
執(zhí)行這句SQL,SQL Server報錯信息如下:
Msg 8120, Level 16, State 1, Line 1
Column 'OrderDetail.OrderId' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Group By時,Select使用Column聚合函數(shù)代碼如下:
db.OrderDetail.Query()
.GroupBy(db.Order.ProductId)
.Select(db.Order.ProductId, db.OrderDetail.Qty.Sum().As("Sum"))
Having一般都和Group By搭配來使用,上面我們演示了Group By的用法,我們再來看看Having的用法,至于到底什么是Having,請大家自己去Google
Having方法的api:
Query Having(Expression criteria)
在Group By子句中出現(xiàn)的Column,能直接在Having方法Expression里使用;未出現(xiàn)在Group By子句里的Column,要在Having方法Expression里使用時,必須要聚合。這和上面Group By后Select一樣。
db.OrderDetail.Query()
.GroupBy(db.OrderDetail.ProductId)
.Having(db.OrderDetail.Qty > 0)
上面的代碼將會出錯,因為Having方法里的Expression參數(shù)用了 OrderDetail.Qty,但是它并未出現(xiàn)在Group By子句中。
Group By時,Having使用Column聚合函數(shù)代碼如下:
db.OrderDetail.Query()
.GroupBy(db.OrderDetail.ProductId)
.Having(db.OrderDetail.Qty.Sum > 0)
MicroOrm.Net支持的聚合函數(shù)有:Sum、Min、Max、Avg
浙公網(wǎng)安備 33010602011771號