程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 深度剖析mysql GROUP BY 與 ORDER BY

深度剖析mysql GROUP BY 與 ORDER BY

編輯:MySQL綜合教程

深度剖析mysql GROUP BY 與 ORDER BY。本站提示廣大學習愛好者:(深度剖析mysql GROUP BY 與 ORDER BY)文章只能為提供參考,不一定能成為您想要的結果。以下是深度剖析mysql GROUP BY 與 ORDER BY正文


本文就和年夜家一路深刻研討下mysql中group by與order by.上面是我模仿我的內容表

 

我如今須要掏出每一個分類中最新的內容

select * from test group by category_id order by `date`

成果以下

 

顯著。這不是我想要的數據,緣由是msyql曾經的履行次序是

援用

寫的次序:select ... from... where.... group by... having... order by..
履行次序:from... where...group by... having.... select ... order by...

所以在order by拿到的成果裡曾經是分組的完的最初成果。
由from到where的成果以下的內容。

 

到group by時就獲得了依據category_id分出來的多個小組

 
 

到了select的時刻,只從下面的每一個組裡取第一條信息成果會以下

 

即便order by也只是從下面的成果裡停止排序。其實不是每一個分類的最新信息。
回到我的目標上 --分類中最新的信息
依據下面的剖析,group by到select時只取到分組裡的第一條信息。有兩個處理辦法

1,where+group by(對小組停止排序)
2,從form前往的數據下四肢舉動(即用子查詢)
由where+group by的處理辦法
對group by裡的小組停止排序的函數我只查到group_concat()可以停止排序,但group_concat的感化是將小組裡的字段裡的值停止串連起來。

select group_concat(id order by `date` desc) from `test` group by category_id

 

再改良一下

select * from `test` where id in(select SUBSTRING_INDEX(group_concat(id order by `date` desc),',',1) from `test` group by category_id ) order by `date` desc

 

子查詢處理計劃

select * from (select * from `test` order by `date` desc) `temp`  group by category_id order by `date` desc

本身例子


SELECT * FROM (SELECT * FROM `ecm_copy_goods_change` ORDER BY `cid` DESC) `ecm_copy_goods_change` GROUP BY goods_id ORDER BY `cid` DESC

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved