mysql 分組查詢最大值優化
今天遇到個問題, mysql 取 表中分組,每項最大一條資料 ,假設表沒有索引,資料一百萬多
網上的寫法 百分之 90 是這樣的
SELECT id,max(t1.a),b FROM (SELECT id,a,b FROM table as t1 ORDER BY t1.a DESC LIMIT 100000000) AS t1 GROUP BY b ;
生產環境資料量較大,這樣的 sql 執行會爆炸。
研究了兩個小時,通過以下 sql 解決,效率快一倍,有 id 查詢快十倍,
SELECT DISTICT id,t1.a,t1.b FROM ( SELECT id,max(t1.a) AS a FROM t1 GROUP BY t1.b ) as t2 LEFT JOIN t1 ON t1.id = t2.id AND t1.a=t2.a
優化前
優化後
不知道大神們還有沒有更好的寫法指教下。
&n
相關推薦
mysql 分組查詢最大值優化
今天遇到個問題, mysql 取 表中分組,每項最大一條資料 ,假設表沒有索引,資料一百萬多 網上的寫法 百分之 90 是這樣的 SELECT id,max(t1.a),b FROM (SELECT id,a,b FROM table as t1 ORDER BY t1
資料庫分組查詢最大值的問題
轉載:https://segmentfault.com/a/1190000004157112這裡探討了分組查詢最大值(group-wise-max)的問題。涉及到 SQL 查詢語句中的 GROUP BY 子句及連線(JOIN)操作。問題下面是提問者的表和測試資料:create
MySql按字段分組取最大值記錄 [此博文包含圖片]
from htm 技術 方法 sin gid 最大值 count not 要求:獲得按table1_id分組,並且age最大的記錄信息,即2、3、5條 方法一: select * from (select * from table2 order by age
MySQL分組查詢最早(大)或最晚(小)記錄
想必大家也遇到過查詢每日最早或最晚(最大或最小)記錄這樣的需求,那相應的SQL應該怎麼寫呢? 下面以查詢玩家每日最早或最晚登陸記錄作為例子記錄下。先弄下測試表和資料: CREATE TABLE `test`.`player_login` ( `id` INT NOT
mysql中如何取得分組中最大值的資料?全網最有效的方法
大家都知道,MySQL有分組查詢子句:group by 。面試官就問你了,不是讓你找到一個表中最大的值,而是讓你找到最大值的整行資料,這個時候簡單的分組是搞不定了。需要用到:inner join 子句 先說下inner join 子句的作用: 可以將一個表與另外一個表進行行資料的匹配。
Mysql按欄位分組取最大值記錄
要求:獲得按table1_id分組,並且age最大的記錄資訊,即2、3、5條方法一:select * from (select * from table2 order by age desc) as a group by a.table1_id方法二:select a.* f
MySQL(1)------group by 分組 取最大值
首先表結構 create table sysstudentlibrarypool ( id int auto_increment primary key, score int null, time var
MySQL查詢最大值(最小值)或前n個最大(最小)值的方法分析
在實際中,我們可能會有這樣的需求,就是從資料庫中查出某個欄位的最大值或最小值,或者查出前n個最大(最小)值。例如,查出某個學生成績中最好的一個或者查出排名在前5名的學生成績等。下面簡要給出一些示例查詢程式碼。 我們的表結構如下圖: stuname欄位相當
mysql 查詢 最大值,最小值,第二大,第三大 一共四個值
ble dao from tps HERE not in amp www targe 最大值:select max(num) from table 第二大值:select max(num) from tablewhere num not in(select max(num
lct樹上查詢最大值和路徑長
key fine ins def sca In amp col AC 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 #define
SQL多列查詢最大值
from val top 列數 ali group group by all 查詢 直接從某一列查詢出最大值或最小值很容易,通過group by字句對合適的列進行聚合操作,再使用max()/min()聚合函數就可以求出。 樣本數據如下: key_id x
LeetCode:437. Path Sum III(查詢最大值)
ou are given a binary tree in which each node contains an integer value.Find the number of paths that sum to a given value. The path does not need t
查詢最大值,最小值,以及第二大值
/* 檔名:陣列查詢特定值.c 功能描述:查詢陣列中的最大值,最小值,第二大值 */ #include <stdio.h> #define NR 10 // 陣列元素個數 /從主函式開始/ int main(int argc, cha
線段樹查詢最大值以及查詢區間和
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 94892 Accepted Su
線段樹學習筆記(單點更新+區間查詢最大值+lazy標記+pushdown操作+區間更新+求區間和)
目錄 什麼是線段樹? 線段樹基本操作: 建立線段樹 線段樹單點更新 區間查詢最大最小值 延遲標記(懶人標記)+pushdown操作 區間更新 求區間和 注:以下所有程式碼都是針對維護區間和的。 什麼是線段樹? 線段樹是一種二叉搜尋樹,與區間
1056 Mice and Rice (25 分)分組求最大值
題目 Mice and Rice is the name of a programming contest in which each programmer must write a piece of code to control the movements of a mouse
Oracle資料庫表中查詢最大值和第二大值
我們以機構表為例,機構表中的id欄位是varchar2型別的,而不是number型別,所有要先轉換為number。 select to_number(id) as id from ORGANIZATION; 執行效果如下圖所示: 我們按降序排序來查詢, select to
關於SQL分組取最大值的幾中方式
假如我們有這麼一張表TbOrder具體資料結構如下圖: 如果想要查詢出每個customerId的最近一天的訂單記錄,也就是說要如下結果: 實現語句如下: select * from (select id, orderId, goodsName, orderDate,
升序降序陣列查詢最大值
折半查詢變種演算法實現public class Main { public static void main(String[] args) { int[] attr = { 1, 2, 3,
SQL(oracle) 取得分組後最大值記錄
select * from (select t.*, row_number() over(partition by 分組欄位 order by 排序欄位 desc ) rn from tablename t ) where rn=1 row_number() OVER (PARTITION BY C