對上一層:  模型程式語言參考手冊 > 往績統計函數 >

HrCountBy( ), JrCountBy( ), SrCountBy( )

Print this Topic Previous pageReturn to chapter overviewNext page

函數從馬匹、騎師或馬房往績之中,點算合乎條件的賽事的數目,然後再把點算的結果依指定的算式值 (eBreakdownExpr) 分列並以文字串傳回。

 

語法

HrCountBy('lCountIf','eBreakdownExpr',nRaces,'fCondition',cDefaultValue,cIncluding)

JrCountBy('lCountIf','eBreakdownExpr',nRaces,'fCondition',cDefaultValue,cIncluding)

SrCountBy('lCountIf','eBreakdownExpr',nRaces,'fCondition',cDefaultValue,cIncluding)

 

增強語法

參數 'lCountIf' 和 'eBreakdownExpr'支援多種增強語法,請參閱 本說明頁的下半部 以了解詳情。利用增強語法您可以

1.在單一函式之中進行多項目及多種類統計,這比起利用多個函式進行多次統計快得多
2.自訂回傳字串的格式
3.控制統計組 (Breakdown Groups) 的排序
4.在分組結果之前顯示一總計段,在總計段中可以顯示不分組的總計數字
5.設定統計結果的分隔字串

 

參數

註釋

例子

'lCountIf'

要點算的資料項
lCountIf 可以是任可類型的資料,假如 lCountIf 是邏輯數值,函數只點算「是」值,若函數值為其他任何類別,則函數只點會算 lCountIf 不等如 Null 的往績。

'HrFP( )=1'

'eBreakdownExpr'

分列結果所依據的算式,假如省略了,則統計將不分組,而在所有合條件的記錄中統計並只傳回一組結果。

'HrDistance( )'

nRaces

計算多少場往績(所選取的往績必須符合條件 fCondition)
假如省略了參數 nRaces,投注樂會計算所有合乎條件 fCondition 的往績
假如合乎條件 fCondition 的賽事少於 nRaces,函數只會計算合乎條件 fCondition 的賽事,您可以用 HrCount( ) 計算有多少場賽事合乎條件 fCondition。

6

'fCondition'

您可以把一條件式傳入這參數,函數只會從合乎條件的往績之中提取所需的賽事,fCondition 由 For 和 While 子句組成。
當投注樂計算往績資料的時候,它只會計算那些合乎 For 條件的賽事。
當投注樂計算往績資料的時候,一旦遇到了不合乎 While 條件的賽事的時候,計算便會終止,函數會即時傳回計算結果。
For 和 While 子句都可省略。

'For HrFP( )=1 While

HrDate( )>Date(1999,9,1)'

cDefaultValue

當函數未能從往績之中提取任何合適的資料的時候,函數會傳回這參數值(預設值)。


cIncluding

在正常情況下,函數不會計算即日賽事,假如您要包括即日賽事,您可以利用 cIncluding 參數改變函數提取資料的範圍。請參閱以下說明頁以了解更多:MCL 函數的 cIncluding 參數

'R'

 

回傳值

Character(字串的長度視乎分列算式的值而定,由於字串的長度有可能很大,我們一般會把欄位設定為 Multiline Text)

 

例子

HrCountBy( ,'HrDistance( )')

函數傳回以距離分列出所有賽事的數目

 

HrCountBy('HrFp( )=1','HrDistance( )')

函數在所有賽往績中點數算勝出賽事的數目,然後以距離分列

 

HrCountBy( ,'HrDistance( )', ,'For HrFp( )=1')

函數在勝出的賽往績中點算賽事的數目,然後以距離分列

 

為了分辨以上三例子的分別,我們以上三例的函數建立了下圖的檢視。

第 1 欄的算式並未有設定往績篩選的條件,亦沒有指定數算甚麼值,所以算式會點算所有賽事,並把數目依距離分列
第 2 欄的算式亦沒有設定往績篩選的條件,所以算式仍會數算所有賽事,但卻指定了 HrFp( )=1 才會點算,若馬匹在某些距離從未勝出,這些距離的點算結果為 0
第 3 欄的算式指定只點算合乎條件 'For HrFp( )=1' 的賽事,假如某些距離從未勝出,該距離便不會出現在結果之中

 

我們可以看到第 2 和第 3 欄的資料大致相同,分別是第 2 欄列出了所有距離而第 3 欄則只列出勝出距離。

 

 

 

增強語法一: 'lCountIf' 內含多統計項

'..<<lCountIf1>>..<<lCountIf2>>...'

 

您可以在 'lCountIf' 參數字串安放數目不限的點算子項目,每一個子項目用 "<<" 和 ">>" 包圍著,"<<" 和 ">>" 的前後可以插入數目不限的文字,這些文字將會如實地在回傳字串中出現。

 

例子

HrCountBy('<<HrFp( )=1>> wins in <<HrFp( )>> starts' ,'HrDistance( )')

 

本例中 'lCountIf' 參數中有兩個子項目:

子項目 <<HrFp( )=1>> 點算每一組賽事(第二參數為 HrDistance( ) 代表以距離分組)中的勝出(名次=1)數目
子項目 <<HrFp( )>> 點算每一組賽事的場數,並只點算 HrFp( ) 不等如 Null 值的賽事

 

假如馬匹曾經跑過 5 場 1000米、9 場 1200 米及 3 場 1400 米的賽事,而其中有一場 1000 米及 2 場 1200 米賽事勝出,而 3 場 1400 米均落敗,則函數將會傳回如下字串:

"1000(1 wins in 5 starts) 1200(2 wins in 9 starts) 1400(0 wins in 3 starts)"

 

 

增強語法二: 'lCountIf' 包含了總計段和分組統計段

您可以利用分隔符號 "||" 把 'lCountIf' 參數分成兩段,每段可以有不限數目的統計項,每項都置於符號 "<<" 和 ">>" 之中:

'..<<lOverallCountIf1>>..<<lOverallCountIf2>>...||..<<lDetailCountIf1>>..<<lDetailCountIf2>>...'

 

參數段

位置

作用

總計段

..<<lOverallCountIf1>>..<<lOverallCountIf2>>...

|| 的左方

不分組別地把所有合條件的記錄統計

分組統計段

..<<lDetailCountIf1>>..<<lDetailCountIf2>>...

|| 的右方

根據 'eBreakdownExpr' 參數把記錄分組後,在每組內統計

 

假如總計段只有一個 "~" 符號,則函數會把分組統計所的項目及格式複製到總計段,原有分組數值的位置則顯示「總計」兩字:

'~||..<<lDetailCountIf1>>..<<lDetailCountIf2>>...'

 

 

例子

HrCountBy('Totally <<HrFp( )=1>> wins in <<HrFp( )>> races: ||<<HrFp( )=1>> wins in <<HrFp( )>> starts' ,'HrDistance( )')

 

假如馬匹在曾經跑過 5 場 1000 和 9 場 1200 米及 3 場 1400 米的賽事其中有一場 1000 米及 2 場 1200 米賽事勝出而 3 場 1400 米均落敗,則函數將會傳回如下字串:

"Totally 3 wins in 17 races: 1000(1 wins in 5 starts) 1200(2 wins in 9 starts) 1400(0 wins in 3 starts)"

 

HrCountBy('~||<<HrFp( )=1>> wins in <<HrFp( )>> starts' ,'HrDistance( )')

 

假如統計的馬匹和場次和上例完全相同,則函數將會傳回:

"總計(3 wins in 17 starts) 1000(1 wins in 5 starts) 1200(2 wins in 9 starts) 1400(0 wins in 3 starts)"

 

 

增強語法三: 利用「統計指示」改變統計方法

您可以利用下表所的統計指示去設定統計項的統計方法:

統計指示

說明

CNT:

點算組內算式值為是 (True) 的記錄的數目,若算式值為其他任何類別,則點算算式值不等如 Null 的記錄

CNTF:

功能和 CNT: 基本上相同,不同的是若點算的結果為零,則整組結果(包括組內的其他統計項)刪除

CNT%:

點算組內算式值為是 (True) 的記錄的數目,並把點算所得的數字除以組內的記錄個數,以計算及傳回點算所得的記錄佔所有記錄的百份比,例如在12 場 1400 米賽事中有 3 場頭馬,則統計項 <<CNT%:HrFp( )=1>> 會傳回 "25%"。

CNTF%:

功能和 CNT%: 基本上相同,不同的是若點算的結果為零,則整組結果(包括組內的其他統計項)刪除

SUM:

計算組內所有記錄的算式值的總和,假如算式值為 Null 則略過不計

AVE:

計算組內所有記錄的算式值的平均值,假如算式值為 Null 則略過不計

MAX:

計算組內所有記錄的算式值的最大值,假如算式值為 Null 則略過不計

MIN:

計算組內所有記錄的算式值的最小值,假如算式值為 Null 則略過不計

ANY:

選取組內任一不為 Null 值的記錄的算式值

 

 

例子

HrCountBy('Wins:<<Cnt:HrFp( )=1>>,Best:<<Min:HrFp( )>>','HrDraw( )')

HrCountBy('Wins:<<HrFp( )=1>>,Best:<<Min:HrFp( )>>','HrDraw( )')

 

本例統計馬匹在各檔位的以下兩個項目

1.頭馬數目 <<Cnt:HrFp( )=1>>,由於函數 HrCountBy( ) 的預設統計方法是 Cnt,所以 <<Cnt:HrFp( )=1>> 可以省略為 <<HrFp( )=1>>
2.最佳名次 <<Min:HrFp( )>>

 

以下回傳值的例子顯示馬匹曾經在第 1、2、6 及 10 檔出賽,在第 2 和第 10 檔曾經分別勝出一次和兩次,在第 1 和第 6  檔從未勝出,這兩檔的的最佳名次分別為 3 和 12。

"1(Wins:0,Best:3) 2(Wins:1,Best:1) 6(Wins:0,Best:12) 10(Wins:2,Best:1) "

 

 

HrCountBy('Wins:<<Cntf:HrFp( )=1>>,Best:<<Min:HrFp( )>>','HrDraw( )')

 

本例的算式和上例的算式統計相同的項目,但由於馬匹在第 1 和第 6  檔從未勝出,"Cntf:" 指示函數把這兩組統計結果刪除。假如我們把算式運用於和上例完全相同的馬匹和賽事上,結果將會如下:

"2(Wins:1,Best:1) 10(Wins:2,Best:1) "

 

 

增強語法四:在 'eBreakdownExpr' 參數中設定分組文字的格式

函數的每組的統計結果預設以 xx(....) 的格式列出,其中 xx 代表算式 eBreakdownExpr 傳回的數值,例如上例中 "1(Wins:0 Best:3)" 的 1 代表 1 檔,是 HrDraw( ) 傳回 1 的組別。假如您要自訂統計組的格式,您可以在分組算式的前後加入文字以以取代預設格式,法則如下:

1.把分組算式於在 "<<" 及 ">>" 之中
2.在 "<<" 及 ">>" 的前後加入要顯示的文字
3.一但使用了 "<<" 及 ">>" 之後,統計組的預設括號將不會再出現

 

例子

HrCountBy('Wins:<<HrFp( )=1>>,Best:<<Min:HrFp( )>>  ','Draw#<<HrDraw( )>>:')

 

 

以下是回傳值的模樣:

"Draw#1:Wins:0,Best:3  Draw#2:Wins:1,Best:1  Draw#6:Wins:0,Best:12  Draw#10:Wins:2,Best:1  "

請留意在本例中在第一參數的末端有兩個空白字,這些空白使組與組不致於互相緊貼。

 

 

增強語法五:在 'eBreakdownExpr' 參數中加入排序算式

您可以在 'eBreakdownExpr' 參數的開始位置加入一排序算式,算式必須放置在大括號之內,並以 "Asc:" 或 "Desc:" 分別代表由小至大或由大至小。算項可以包括分組統計的結果,這些分組統計必須放置在 "<<" 及 ">>" 之中,格式和上面各節所述的統計項的格式相同。

 

例子

HrCountBy('HrFp( )=1','{Desc:<<Cnt:HrFp( )=1>>}HrDistance( )')

傳回:1400(6) 1200(4) 1000(1) 1600(0)

 

HrCountBy('HrFp( )=1','HrDistance( )')

傳回:1000(1) 1200(4) 1400(6) 1600(0)

 

上列兩式同樣傳回馬匹在各距離賽事的勝出數目,不同的是下方的算式會用預設順序顯示結果(即分組數值由小至大),而上方算式則會依馬匹勝出數目由大至小排列。

 

 

增強語法六:設定取代預設分引字元的新分隔字串

您可以在 'eBreakdownExpr' 參數的右方加入 "||" 並再在其右方設定新的分格字串,以取代預設的空白字 " "。分隔字串可以包含多於一個的算式,但它們必須放置在 "<<" 及 ">>" 之中。

 

例子

HrCountBy('HrFp( )=1','HrDistance( )|| / ')

傳回:1000(1) / 1200(4) / 1400(6) / 1600(0). 在 "||" 的右方設定了新的分隔字元 " / "。

 

HrCountBy('HrFp( )=1','HrDistance( )||<<Chr(13)>>')

函數的分隔字元 Chr(13) 把統計結果顯示在不同的列中。由於 Chr(13) 是一算式,我們必須把它放在 "<<" 及 ">>" 之中。 函數將會傳回以下各列:
1000(1)
1200(4)
1400(6)
1600(0)

 

 

參閱

HrAverageBy( ), JrAverageBy( ), SrAverageBy( ) | HrSumBy( ), JrSumBy( ), SrSumBy( ) | HrCount( ), JrCount( ), SrCount( ) | HrCountNZ( ), JrCountNZ( ), SrCountNZ( )

 

 


Page url: http://www.racematenet.com/help/index.html?hrcountby.htm