Mysql 利用group by 分組排序
MySql的group by與oracle有所不同,查詢得欄位可以不用寫聚合函式,查詢結果取得是每一組的第一行記錄。
利用上面的特點,可以利用mysql實現一種獨特的排序;
首先先按某個欄位進行order by,然後把有順序的表進行分組,這樣每組的成員都是有順序的,而mysql預設取得分組的第一行。從而得到每組的最值。
最近工作用的表有這樣一個需求,ip欄位有重複,取最後時間更新的ip。
這是模擬表:
起初我用關聯查詢實現的:
SELECT t.id,t.ip
FROM app t
INNER JOIN
(SELECT ip,MAX(updatetime) m_updatetime
FROM app
GROUP BY
ip) t1
ON t1.ip=t.ip AND t.updatetime=t1.m_updatetime
但是這種方式,效率太低,查詢太慢了。
現在可以利用mysql的group by特性實現
SELECT
t.id,
t.ip
FROM (SELECT *
FROM app
ORDER BY updateTime DESC) t
GROUP BY t.ip
先對更新時間降序排列,再取每組的第一條記錄。
相關推薦
Mysql 利用group by 分組排序
MySql的group by與oracle有所不同,查詢得欄位可以不用寫聚合函式,查詢結果取得是每一組的第一行記錄。 利用上面的特點,可以利用mysql實現一種獨特的排序; 首先先按某個欄位進行order by,然後把有順序的表進行分組,這樣每組的成員都是有順序的,而my
mysql使用GROUP BY分組實現取前N條記錄的方法
cls class ges rom 當前 分組 實現 一個 images MySQL中GROUP BY分組取前N條記錄實現 mysql分組,取記錄 GROUP BY之後如何取每組的前兩位下面我來講述mysql中GROUP BY分組取前N條記錄實現方法。 這是測試表(也
淺析MySQL使用 GROUP BY 分組聚合與細分聚合
官方 dev 錯誤 row 一個 求平均值 時也 total 正是 1. 聚合函數(Aggregate Function) MySQL(5.7 ) 官方文檔中給出的聚合函數列表(圖片)如下: 詳情點擊https://dev.mysql.com/doc/refman/5
MySQL之——GROUP BY分組取欄位最大值
出處:http://blog.csdn.net/l1028386804/article/details/54657412 假設有一個業務場景,需要查詢使用者登入記錄資訊,其中表結構如下: [sql] view plain cop
mysql中group by分組後查詢無資料補0;
mysql經常會用到Group By來進行分組查詢,但也經常會遇到一個問題,就是當有where條件時,被where條件過濾的資料不顯示了。 例如我有一組資料: 我想查詢當日領取數量和當日核銷數量;
MySQL(1)------group by 分組 取最大值
首先表結構 create table sysstudentlibrarypool ( id int auto_increment primary key, score int null, time var
mysql group by 分組及having 過濾分組
基於 order 創建 tro having nbsp HERE sel strong 1,group by 創建分組 在mysql中 group by 句子要註意,必須where 之後,order by 之前 select order_code ,count(*) as
【MySql】Group By數據分組
根據 round 技術 ack 使用 sele bsp inf span GROUP BY 語句根據一個或多個列對結果集進行分組。 在分組的列上我們可以使用 COUNT, SUM, AVG,等函數。 因為聚合函數通過作用於一組數據而只返回一個單個值, 因此,在SELECT
關於MYSQL group by 分組按時間取最大值的實現方法!
類如 有一個帖子的回覆表,posts( id , tid , subject , message , dateline ) , id 為 自動增長欄位, tid為該回復的主題帖子的id(外來鍵關聯), subject 為回覆標題, message 為回覆內容, dateline 為回覆時間,用UNIX 時間
Mysql之group by 和order by 一起用時的排序問題
業務需求,需要查詢表裡不同分類下的order最大的記錄。 查看錶中的記錄: SELECT id,tid,`order`, FROM_UNIXTIME(yestime) FROM tfen WHERE tid IN(7512, 7514) ORDER BY `order` DESC ;
Mysql 5.7 用group by 分組時錯誤:functionally dependent on columns in GROUP BY clause; this is incompatible
/etc/mysql/mysql.conf.d$ vim mysqld.cnf 在檔案頭出新增如下內容: sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUT
MYSQL group by 分組後只取最大、最小值對應的記錄方法
這裡有2篇文章 綜合起來就差不多了 工作忙 沒時間整理 其實和其它資料庫一樣 並沒有什麼捷徑 效率的話還是join比較快 MYSQL每個使用者取1條記錄的三種寫法(group by xxx) 同學問我關於這方面的SQL語句,我特意記憶一下,畢竟這個也比較常見了
MYSQL GROUP BY分組按時間降序
牛客網中/高階專案 站內信頁面展示需求:將conversation_id分組 按created_date降序排列 (不同的人越新的私信排在越前面 同一個人的多條私信也按時間降序) 表(message) 結構: id=10分別和id=8、id=9的最新互
SQL實現group by 分組後組內排序
在一個月黑風高的夜晚,自己無聊學習的SQL的時候,練習,突發奇想的想實現一個功能查詢,一張成績表有如下欄位,班級ID,英語成績,資料成績,語文成績如下圖 實現 查詢出 每個班級英語成績最高的前兩名的記錄。 看起來不難的業務,做起來才知道還挺麻煩的,說白了其實就是實現分組後的組
mongo與java 的group by分組和排序程式碼(備忘)
MongoTemplate gameMt = (根據具體專案獲得) DBCollection myColl = gameMt.getDb().getCollection("avatar");//表名 // 分組 DBObject
【Mysql】利用group by附帶having進行聚類查詢
聚類查詢所針對的物件是表的其中一列,譬如如下的testtable表,要查出username這一列中,各個項所出現的次數,則用到聚類查詢 顯然,聚類查詢之後,得到的結果必須與id,number這兩列半點關係都沒有。因此,也就是正如上門,所說,聚類查詢所針對的物件是表的其中一
使用group by分組之後子查詢的order by排序失效的問題
需求: 1.首頁的查詢需要按照lrsj進行排序 2.每一條資料通過fchrq,chxh進行分組 原始的sql SELECT fchrq,chxh FROM (SELECT top 100 percent chxh,fchrq,lrsj FROM HCZZQD_so
mysql group by 分組
MySQL GROUP BY 語句 GROUP BY 語句根據一個或多個列對結果集進行分組。 在分組的列上我們可以使用 COUNT, SUM, AVG,等函式。 GROUP BY 語法 SELECT column_name, function(column_name)
mysql group by內排序的實現以及having和where 條件語句查詢的區別
例如有一個 版本號的登陸日誌表,loginlog( id, LoginName, Resource, IP, LoginTime, loginversion) , id 為 自動增長欄位,loginname為登陸使用者名稱, logintime 為最近一次登陸時間,lo
Group by 分組查詢 實戰
男女 img 通過 ont rom 出現的次數 是我 實現 一起 實戰經歷,由於本人在共享單車上班,我們的單車管理模塊,可以根據單車號查詢單車,但是單車號沒有設置unique(獨一無二約束),說以這就增加了單車號可能重復的風險,但是一般情況下,單車號是不會重復的,因為平