計算資料總數


阿瑟 發表



這個比較複雜, 除了要合併兩個資料表以外還要用一些方法來將資料分組. 我們一步一步來吧!

使用Count以及GROUP BY
假設你有一張資料表叫document, 其中有一欄位class, 紀錄每一篇文章所屬的分類. 那要怎麼去計算每一個class有多少篇文章呢?

sql="SELECT Count(class) AS total, class FROM document GROUP BY class"

語法講解:
Count(class) AS total, 代表以class欄位為準, 計算該欄位數值相同的文章有幾筆, 產生新的total欄位來顯示出class欄位相同的文章總數
GROUP BY class, 用了Count()以後, 新的資料表顯示出來的已經不是document的資料, 而是資料的總數, 因此您必須用GROUP BY來將欄位數值相同的資料合併, 將不同的分組

由於新產生的資料夾內含有的是總數, 對於document的欄位您都必須一一加以分組 (GROUP BY), 故不能使用星號 (*) 來一次將所有的欄位加進來.

這段語法跑出來的結果應該是你會看到兩個欄位, class和total, class是分類名稱, total是新產生的欄位, 含有每個分類的總數. 這就是一個基本的資料總數計算範例.

就小弟的凡歷來說, 小弟有一個document資料表裡面含有教學文章, class欄位記錄著每個文章的所在分類, 而利用上面的語法, GROUP BY會將重複的分類(class欄位)合併, 接著會創造出一個新欄位total, total會紀錄有多少資料有相同的分類值.

結果如下圖:

使用RIGHT JOIN
假設你有另一個叫做class的資料表儲存所有的分類, 如果今天你建立了新的分類, 而該分類在document資料表並沒有任何文章, 那利用上面的方法, 該分類不就不見了? 這個問題可以利用RIGHT JOIN來解決.

假設class資料表有class欄位.
document資料表也有class欄位.
class.class代表的是class資料表的class欄位, 這個欄位紀錄的現有的分類名稱
document.class代表的是document資料表的class欄位, 這個欄位紀錄對應的文章所屬的分類

sql="SELECT class.class, Count(document.class) AS totalcount, FROM document RIGHT JOIN class ON document.class = class.class GROUP BY class.class, document.class"


語法講解:
SELECT class.class, Count(document.class) AS totalcount, 從class資料表選出class欄位, 並且產生新欄位totalcount來計算document中相同class的文章有幾筆.
FROM document RIGHT JOIN class ON document.class = class.class, 這是之前的教學提過的 RIGHT JOIN方法, 這樣會將所有class資料表的class欄位成員包含, 而document資料表則只包含和class有對應的資料, 這樣如果建立新的分類 (class.class), 就算document資料表中沒有任何對應的資料, 也會顯示出來.
GROUP BY class.class, document.class, 和剛剛的一樣, 因為新的資料表既不是class也不是document資料表, 因此你要將資料分組才能正常顯示.

這次的教學比較複雜一點, 不過會用了以後就不用再每次加入文章的時候在那邊加加減減了.如果有看沒有懂得話, 可以建立一個資料庫, 自己動手試試...之前小弟在聽別人講的時候也是聽不懂...實作以後就一目了然了

感謝阿閔兄的指導

最後更新日期: 1/30/2003 11:34:42 AM