亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

mysql 先排序后分組

mysql 先排序后分組

白豬掌柜的 2019-04-03 10:01:35
不用子查詢,用了子查詢會查一次全表。表結構ID Type User Level取出Level 最高,Type分組的ID出來CREATE TABLE IF NOT EXISTS `test` ( `Id` int(11) NOT NULL, `PlayerId` int(11) NOT NULL, `Type` int(11) NOT NULL, `Level` tinyint(4) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `test`.`test` (`Id`, `PlayerId`, `Type`, `Level`) VALUES (NULL, '1', '1', '2'), (NULL, '1', '1', '13'), (NULL, '1', '2', '23'), (NULL, '1', '2', '3'), (NULL, '1', '3', '24');EXPLAIN SELECT C.`Id` FROM ( SELECT * FROM `test` WHERE `PlayerId` = 1 ORDER BY `Level` DESC ) AS C GROUP BY C.`Type` 這樣的執行效率太低了。
查看完整描述

2 回答

?
慕尼黑8549860

TA貢獻1818條經驗 獲得超11個贊

  1. 給字段加索引,你現在給的測試表是沒索引的,所以會全表檢索.這個是最快捷的方法.

  2. 借用外部函數,現DISTINCT(Type),然后再到數據庫中根據每個類型的Type,獲取MAX(Id)的值,這種情況下會增大與數據庫的交互次數,但是對數據庫的壓力較小.這種方式同樣使用索引.

  3. 利用好索引很關鍵.且查詢語句盡量縮小查詢數據的范圍


查看完整回答
反對 回復 2019-04-04
?
明月笑刀無情

TA貢獻1828條經驗 獲得超4個贊

CREATE TABLE test

(

    str VARCHAR(1),

    time DATETIME

);


INSERT INTO ywtg.test (str, time) VALUES ('a', '2016-08-03 16:41:37');

INSERT INTO ywtg.test (str, time) VALUES ('b', '2016-08-10 23:42:26');

INSERT INTO ywtg.test (str, time) VALUES ('a', '2016-08-13 23:42:46');

INSERT INTO ywtg.test (str, time) VALUES ('b', '2016-08-14 23:42:58');

INSERT INTO ywtg.test (str, time) VALUES ('b', '2016-08-15 23:43:13');

如上是表結構和數據,**需求:組與組之間按時間從大到小排序,組內數據按從小到大排序.** 

如上數據也就是b組在a組前,b組和a組 組內數據又按從小到大排序,實現sql如下:


SELECT tt.*

FROM test tt LEFT JOIN (

                         SELECT

                           @rownum := @rownum + 1 AS rownum,

                           test.str

                         FROM (SELECT @rownum := 0) r, (SELECT str

                                                        FROM test

                                                        GROUP BY str

                                                        ORDER BY time DESC) test

                       ) aa ON tt.str = aa.str

ORDER BY aa.rownum, time;



查看完整回答
反對 回復 2019-04-04
  • 2 回答
  • 0 關注
  • 2363 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號