函數從馬匹、騎師或馬房往績之中,點算合乎條件的賽事的數目,然後再把點算的結果依指定的算式值 (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' |
|
'HrFP( )=1' |
||||||||
'eBreakdownExpr' |
分列結果所依據的算式,假如省略了,則統計將不分組,而在所有合條件的記錄中統計並只傳回一組結果。 |
'HrDistance( )' |
||||||||
nRaces |
|
6 |
||||||||
'fCondition' |
|
'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