-
TIPS-Calculating Percentage In SQL Query
-
有一個資料表,內有四筆資料,數量分別是2, 3, 5, 10,我希望用SQL查出如下包含百分比10%,15%, 25%, 50%的結果:
ID AMT PERC
----- ------ -------
1 2 10%
2 3 15%
3 5 25%
4 10 50%
同事出了這個考題給我,算是讓我學會SUM() OVER (PARTITION BY ...)的用法。以上問題的解法如下:
--FOR ORACLE
SELECT ID, AMT,
AMT * 100 / SUM(AMT) OVER (PARTITION BY NULL) || '%'
AS PERC
FROM JEFF
--FOR SQL Server
SELECT ID, AMT,
CONVERT(VARCHAR(3),
AMT * 100 / SUM(AMT) OVER (PARTITION BY NULL)
) + '%'
AS PERC
FROM JEFF
UPDATE @ 2007-10-27
SUM(AMT) OVER (PARTITION BY NULL) 寫成 SUM(AMT) OVER () 即可算全部的總和
-
Artile-Automatic Web Testing, With IEUnit
-
已經上線運作的網站系統,使用者又提出會動搖國本的核心功能修改需求,此時你會?
1) 警告使用者修改後可能導致家破人亡,然後立即裝忙忘記使用者曾說過什麼?
2) 硬著頭皮改完,苦著一張臉花十八小時把所有相關功能重新測過一次
3) 修改程式後即刻上線,將使用者編制為”虛擬測試團隊”,等著蒐集”虛擬測試員”回報的Bug
測試工作很煩人卻很重要,尤其理論上系統只要經過修改,就應該再做一次完整的系統測試,避免修掉一個Bug又冒出兩個Bug的鳥事。但將所有的網站功能操作做完一輪可能得耗上數小時,誰能有此等耐性在每次修改後都演一次鐵杵磨成繡花針的悲情戲? (如果真有人樂此不疲,建議該去醫院精神科掛個號,檢查一下是否罹患了強迫性精神官能症?)
比較好的做法是將這些測試程序自動化,把枯燥的工作丟給不會喊累不會嫌煩的機器人,避免自己陷入手工測試的無間地獄,把時間拿來做更有意義的事。
看過好多人都有驚人的耐性不厭其煩地一測在測,沒有耐心的我自嘆弗如之餘,只能去找來自動測試的工具—IEUnit(目前還有Selenium等其他選擇,但我IEUnit已經上手,各功能也都齊備,就沒想要換),一開始要投入很多時間熟悉工具,撰寫Test Script,但之後就可以翹著二郎腿用一根手指頭搞定系統測試,算是先苦後甘。
關於IEUnit的介紹,以下是我早先發表在RUN!PC雜誌的文章,給大家參考。
文章下載
-
【黑暗信箱】RegEx應用的簡單探討
-
網友William提了一個有意思的問題,他想要分析出程式碼中的各Class, Method, Loop等以{ }夾成的區塊,是否可以用RegEx來達成?
舉例來說,程式碼
main()
{
int count=0;
printf ("hello world");
for (i=0; i<10; i++)
{
count++;
}
}
fun1(int a)
{ return a+1; }
fun2()
{
doSomething();
}
希望能分解成三個字串"main() {.... }"、"fun1(int a) {...}"跟"fun2() {...}"
我的看法是,以RegEx的文字解析的靈活度,要做出基本的雛型並不難,但如果要做到100%涵蓋所有可能出現的樣式,就得耗費相當可觀的功夫。
如果只以將main, fun1, fun2三個Member抓出來為目標,原則上用一個RegEx Pattern "(?ims)\S+?[(].*?[)]\s*{.*?}"就可以打死,如下: (我借用了CodeProject上的.NET RegText Test來示範)

是不是很簡單呀? 不過Demo多半只會Show較犀利的一面,這個寫法在遇到某些特殊組合時破功。例如: 我如果將"for (i=0..."改成"if (true) { } for(i=0;...",for (i=0馬上被誤認成method,我們可以再限制( )中間不准出現=,Pattern改成"(?ims)\S+?[(][^=]*?[)]\s*{.*?}",就可以解決誤認for的問題,但是while(someBoolean)就不會出現等號,於是我們又要再想如何避開。
這就是我平時應用RegEx處理問題的步驟,先設計出基本Pattern->試跑資料->發現例外->只對例外修改Pattern->跑更多資料->又發現例外->再修改Pattern... 有時候,某些例外實在太難處理了,我還會預先變動文字排列或用Replace的技巧先把某些文字取代掉,避免干擾RegEx的比對,等都處理完了再將它們還原。
以上就是我應用RegEx的一些心得,供大家參考。