使用group by分組之後子查詢的order by排序失效的問題
需求:
1.首頁的查詢需要按照lrsj進行排序
2.每一條資料通過fchrq,chxh進行分組
原始的sql
SELECT fchrq,chxh FROM
(SELECT top 100 percent chxh,fchrq,lrsj FROM HCZZQD_source where chxh is not null
<include refid="resultWhereSqlv2" />
ORDER BY lrsj desc) T
GROUP BY fchrq,chxh
按照正常邏輯貌似沒錯,子查詢中是按照錄入時間進行了排序,查詢是使用group by進行了分組;
在使用分頁外掛後,應該是可以獲取到資料的;
實際上確實獲取到了資料,但是order by lrsj並沒有生效,取出來的資料只是group by進行了分組;
方案一:<mission false>
top 100 percent 是取查詢出來的所有資料,網上的偏方: top 100 percent 改為 top 99.999 percent 原理我並沒有理解,但是對我的sql並沒有生效,我不知道這個改動的適用範圍
方案二:<mission success>
實際上很簡單的sql,sql會對資料先進行分組在進行排序,而我上述寫法是先排序再分組,之所以還這樣寫是因為分組的時候fchrq ,chxh 裡面不包含lrsj.
所以我走進了誤區:我的子查詢好像只能獲取欄位fchrq,chxh.並不能獲取lrsj, 然而事實上並不是
百度失敗後,盯著sql突然想到了,按照group by進行分組確實不能直接獲取到lrsj,因為是兩個lrsj,可是我可以獲取第一排資料的lrsj也就是max(lrsj);
於是改動成功:
SELECT fchrq,chxh FROM HCZZQD_source where chxh is not null
<include refid="resultWhereSqlv2" />
group BY fchrq,chxh
ORDER by max(lrsj) desc
不需要子查詢,直需要查詢這個表一次即可;