之前公司的前輩寫了一段這樣的語法
想要先依p.bnd_ctrl排序(先Y再N)
然後抓第一筆的資料 結果卻不如所料
SELECT rownum,a.Prt_No, a.b_Beg_Qty, a.b_Ttl_In,p.bnd_ctrl
FROM Bnd_Phy_Analysis a, bnd_prtmst p
WHERE a.prt_no = p.prt_no
and a.Bg_Group_Prt = 'C2PAM HEDCB-05'
and a.Phy_No = '10303'
and Rownum = 1
ORDER BY p.bnd_ctrl desc, (a.b_Beg_Qty + a.b_Ttl_In) desc;
Oracle 的 rownum 是一個 pseudocolumn,意思是不存在的 column,是經由計算得來的
RowNum 是先經過編號後,才再 order by name 的
如果要先 order by name 才編號,就必須下這樣的sql script
SELECT t.* FROM (
SELECT rownum,a.Prt_No, a.b_Beg_Qty, a.b_Ttl_In,p.bnd_ctrl
FROM Bnd_Phy_Analysis a, bnd_prtmst p
WHERE a.prt_no = p.prt_no
and a.Bg_Group_Prt = 'C2PAM HEDCB-05'
and a.Phy_No = '10303'
ORDER BY p.bnd_ctrl desc, (a.b_Beg_Qty + a.b_Ttl_In) desc) t
WHERE Rownum = 1
Oracle官網的解說 http://www.oracle.com/technology/oramag/oracle/06-sep/o56asktom.html
2014年4月15日 星期二
2013年12月12日 星期四
[程式語言]SQL語法:Count(*),Count(1),Count(column)
再前一家公司時,所學到的計算資料筆數的方法是使用Count(*),新公司則是看到多為Count(1),心中自然有點疑惑,便來查查吧
簡而言之
Count(*)等於Count(1),計算全部的筆數也包含空值
Count(column)會排除掉空值,也因為排除空值的動作,一般而言速度較慢,除非這個column剛好有建立index
Count(1)不代表是Count第一個Column的數目,所以第一個Clumn裡面是否有空值不會有影響
另外
如果是對特定的column做count的話,建立這個列的非聚集索引能對count有很大的幫助。
如果經常count(*)的話,則可以找一個最小的column建立非聚集索引以避免全表掃描而影響整體性能。
簡而言之
Count(*)等於Count(1),計算全部的筆數也包含空值
Count(column)會排除掉空值,也因為排除空值的動作,一般而言速度較慢,除非這個column剛好有建立index
Count(1)不代表是Count第一個Column的數目,所以第一個Clumn裡面是否有空值不會有影響
另外
如果是對特定的column做count的話,建立這個列的非聚集索引能對count有很大的幫助。
如果經常count(*)的話,則可以找一個最小的column建立非聚集索引以避免全表掃描而影響整體性能。
訂閱:
文章 (Atom)
-
屏東萬金天主堂 屏東縣萬巒鄉萬金村萬興路24號 訂房專線:(08)7830955 聖堂電話:(08)7832005 潘世華先生 網址:http://www.catholic.org.tw/bankin/bankim/center.htm http...
-
以下來源網址:http://blog.csdn.net/papaya14/article/details/7638428 -----------(以下僅簡體轉正體,未更動內容一絲分毫) Form的Trigger的優先順序是從item,到block,到form級別,如果另外設...
-
伊底帕斯王 時代背景 在探討這齣著名的希臘悲劇之前,首先讓我們先瞭解當時的歷史背景。 雅典當時的外交 約當雅典從事各種改革逐漸走向民主政治的時候,在亞洲的波斯帝國正逐漸壯大(大流士一世、澤爾士),並在地中海建立強大艦隊,勢力延伸至小亞細亞沿海一帶的希臘城邦,威脅...