国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

mysql group by 排序問題一些自我理解

2024-07-24 12:38:02
字體:
來源:轉載
供稿:網友

記得以前老師跟我講sql中group by與order by 不能同時使用,使用時會有問題,后來我工作了發現他講的是錯誤的,其實mysql group by 與排序是可使用的,只要我們稍加處理。

類如有一個 帖子的回復表,posts(id,tid,subject,message,dateline).

id為 自動增長字段,tid為該回復的主題帖子的id(外鍵關聯),subject 為回復標題, message 為回復內容,dateline 為回復時間,用UNIX 時間戳表示.

現在要求 選出 前十個來自不同主題的最新回復,代碼如下:

SELECT * FROM posts GROUP BY tid LIMIT 10

這樣一個sql語句選出來的并非你想要的 最新的回復,而是最早的回復,實際上是某篇主題的第一條回復記錄.

也就是說 GROUP BY 語句沒有排序,那么怎么才能讓 GROUP 按照 dateline 倒序排列呢?加上 order by 子句?

group by 后order by不準確問題,解決如下:

錯誤語句,代碼如下:

select A.id, A.type, B.id, B.h1 from A,B where A.type=3 and A.id=B.id group by B.id order by A.id desc limit 10

正確語句,代碼如下:

select A.id, A.type, B.id, B.h1 from A,B where A.type=3 and A.id=B.id group by B.id order by max(A.id) desc limit 10

最簡單的,代碼如下:

  1. SELECT * FROM (SELECT * FROM posts ORDER BY dateline DESCAS p GROUP BY tid ORDER BY dateline DESC LIMIT 10  --Vevb.com 

也有網友利用自連接實現的,這樣的效率應該比上面的子查詢效率高,不過,為了簡單明了,就只用這樣一種了,GROUP BY沒有排序功能,可能是mysql弱智的地方,也許是我還沒有發現.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巴林右旗| 政和县| 玉门市| 华池县| 监利县| 旬邑县| 徐闻县| 全南县| 博乐市| 浦东新区| 略阳县| 手机| 张家口市| 剑川县| 革吉县| 贵港市| 靖州| 青海省| 龙里县| 孟津县| 麻城市| 茶陵县| 滦平县| 庆云县| 宝坻区| 泸州市| 黄山市| 杂多县| 军事| 峡江县| 紫阳县| 汪清县| 河池市| 潞西市| 米脂县| 电白县| 大化| 阜南县| 东乡| 旬阳县| 仙游县|