sql:group by和 max


通過group by,having,max實現查詢出每組里指定列中最大的內容

例如:我需要實現的功能是

獲取每個模塊中點擊量最大的內容(表中有許多內容,內容里)

我寫的查詢語句如下

 

 

查詢結果如下:

 

 

然而在我的數據庫中,共有5個mod,mod_id分別為1,2,3,4,15

 

 

查詢結果自動忽略了mod_id=4的數據們。原因是mod_id=4的模塊的最大點擊量88不是第一個出現的mod_id=4的內容。其它的四個最大值都是自己模塊中第一個出現的內容。

這說明我的查詢語句有問題。

 

解決方案:

將一條查詢語句分成兩條查詢語句

 

 第一個查詢語句取出每個mod中click_num的最大值和對應的mod_id,

然后在第二句里再查詢,並將每次的查詢結果附加到slice中。查詢結果:

如圖,modID=4的結果查詢出來了。

 

-----此處是分割線----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

不過由於一個Mod里的最大click_num可能不止一個,所以在上例中的第二句的查詢方式最好使用QueryRows而不是QueryRow. hotcontent的類型也最好改為[]DtContent (DtContent是我定義的一個和數據庫中的表相對應的struct),append也沒法使用了,換成使用copy。。

 

 

 

不過結果並不樂觀,總是出現這種錯誤:

 

 

(原來是我將copy(hotcontents,hotcontent)寫成了copy[,],並不是見鬼了==!!!不過白白浪費許多時間,實在是粗心。)

 

不過hotcontents並沒有如我願不斷變長,hotcontent的內容並沒有復制到hotcontents里,生成結果里許多[] []都是hotcontents

原因是:

 

因為我通過 var hotcontents []DtContent聲明的slice沒有設置長度,這樣hotcontent就復制不進去。因為我無法確信有多少hotcontent,所以我就依據每個模塊*10來設置hotcontents的長度

 

終於解決了,不過由於我聲明的時候給的長度太大了,所以slice里有許多空值,耗費資源。

所以我希望能夠動態的增加長度。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM