mysql 怎樣先排序再分組


權游游牧族:眾所周知!一句SqL語句不能先排序再分組。所以這里給出幾個案例

--表結構--
create table `shop` (
    `id` int (10) PRIMARY KEY,
    `shop_name` varchar (100),
    `item_name` varchar (100),
    `price` int (10)
); 

insert into `shop` (`id`, `shop_name`, `item_name`,`price`) values('1','小賣部','醬油','12');
insert into `shop` (`id`, `shop_name`, `item_name`,`price`) values('2','小賣部','醋','15');
insert into `shop` (`id`, `shop_name`, `item_name`,`price`) values('3','小賣部','脈動','20');
insert into `shop` (`id`, `shop_name`, `item_name`,`price`) values('4','小賣部','沙姜','2');
insert into `shop` (`id`, `shop_name`, `item_name`,`price`) values('5','超市','豬肉','24');
insert into `shop` (`id`, `shop_name`, `item_name`,`price`) values('6','超市','生菜','6');
insert into `shop` (`id`, `shop_name`, `item_name`,`price`) values('7','超市','菜心','5');
insert into `shop` (`id`, `shop_name`, `item_name`,`price`) values('8','連鎖店','生姜','3');
insert into `shop` (`id`, `shop_name`, `item_name`,`price`) values('9','超市','牛肉','30');
insert into `shop` (`id`, `shop_name`, `item_name`,`price`) values('10','連鎖店','蒜頭','2');
insert into `shop` (`id`, `shop_name`, `item_name`,`price`) values('11','連鎖店','黃瓜','20');

對價格price進行排序然后再根據商店類型shop_name進行分組查詢

select * from (select * from shop order by price desc) a GROUP BY a.shop_name

結果只是按照表數據的順序,簡單地進行了分組查詢操作,但是這時候我們還不能下結論說這條sql就是錯誤的,我們用另一個數據庫版本(MySql 5.5.57)測試一下。

最后放上相應的解決辦法:


-方法一,僅適用於低於5.7版本的MySql--
select * from (select * from shop order by price desc) a GROUP BY a.shop_name; 

--方法二--
select * from (select * from shop order by price desc limit 999999) a GROUP BY a.shop_name;

--方法三--
select * from shop a where N > (select count(*) from shop b where b.shop_name = a.shop_name and a.price < b.price) order by a.shop_name,a.price desc;


PS:方法二中使用limit,需要limit的范圍足夠大能包括所有數據,並且每種分類只會顯示一條數據,但是數據較多時運行效率要比方法三快上很多,方法三能夠控制每種分類顯示多少條數據,把N換成需要顯示對應的數字即可。

閱讀原文


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM