1.order by 默認按升序排列(asc/desc),多字段排序 order by 字段 排序方式,字段2 排序方式,..;
在分組排序中,排序是對分組后的結果進行排序,而不是在組中進行排序。
select * from stu order by score desc,name asc;//優先score ,然后name排序
2.limit 在語句表示,截取記錄的條數。一般和order by 配合使用(大數據下Limit使用)
limit[offset][N]
offset: 偏移量 N:條數; 如limit(2,2),即從第三記錄開始取兩條記錄。當一個參數時:limit 2,即從第一條記錄開始取2條
select * from ibmng limit 10,10
3.關於分組和聚合函數的一個問題,(補充)
使用聚合函數,分組時其他字段的值是從庫中取組第一次出現時對應數據,聚合函數的得到值和其他字段的值並不是原來本該對應的一條記錄。只是組合一起
如:以班級進行分組,獲取成績最好的學生,
select name ,max(score) from stu group by bianji;//錯誤,這樣最大成績對應的學生並不是原學生。
如果你想在學校學生表中獲取班級成績最好的學生信息,如果想使用簡單分組是不行,上面已經說明,
方法一:先使用分組查詢出班級和最大成績的結果作為新表,再和原表進行聯合查詢出所對應的學生信息。(保證有多個相同成績的存在情況)
方法二:如果是最好成績只有一個話的特列,倒是可以先按班級和成績排序結果集再進行分組(利用了分組獲取第一次出現的規則)。類似獲取商品中每類物品的最高價格的物品:
4子查詢 where from exists
where 子查詢:聚合函數可以直接用,(差點以為只能在group中使用了,但是一般不能和別的字段一起使用)
使用不同的子查詢查出欄目下最新商品(只是id最大的那個為最新)
where
from
exists:查詢出有商品的欄目:可以理解成外查詢中每條記錄,代入到內查詢中,如果內查詢有結果,就表示外查詢的當前記錄滿足條件。
exists,有點類似in