通過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里有許多空值,耗費資源。
所以我希望能夠動態的增加長度。