最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL不使用order by實現(xiàn)排名的三種思路總結

 更新時間:2021年06月02日 10:45:51   作者:CodePhage  
ORDER BY語句用于根據(jù)指定的列對結果集進行排序,在日常開發(fā)中也經(jīng)常會用到,但下面這篇文章主要給大家介紹了關于MySQL不使用order by實現(xiàn)排名的三種思路,需要的朋友可以參考下

假定業(yè)務:

查看在職員工的薪資的第二名的員工信息

創(chuàng)建數(shù)據(jù)庫

drop database if exists emps;
create database emps;
use emps;

create table employees(
    empId int primary key,-- 員工編號
    gender char(1) NOT NULL, -- 員工性別
	hire_date date NOT NULL -- 員工入職時間
   	);
create table salaries(
    empId int primary key, 
    salary double -- 員工薪資
    );
    
INSERT INTO employees VALUES(10001,'M','1986-06-26');
INSERT INTO employees VALUES(10002,'F','1985-11-21');
INSERT INTO employees VALUES(10003,'M','1986-08-28');
INSERT INTO employees VALUES(10004,'M','1986-12-01');
INSERT INTO salaries VALUES(10001,88958);
INSERT INTO salaries VALUES(10002,72527);
INSERT INTO salaries VALUES(10003,43311);
INSERT INTO salaries VALUES(10004,74057);

題解思路

1、(基礎解法)

先查出salaries表中最高薪資,再以此為條件查出第二高的工資

查詢語句如下:

select
	E.empId,E.gender,E.hire_date,S.salary
from
	employees E join salaries S 
on 
	E.empId = S.empId
where	
	S.salary=
	(
    select max(salary)from salaries 
    where 
        salary<
        (select max(salary) from salaries)
    );
-- ---------------查詢結果------------ --
+-------+--------+------------+--------+
| empId | gender | hire_date  | salary |
+-------+--------+------------+--------+
| 10004 | M      | 1986-12-01 |  74057 |
+-------+--------+------------+--------+

2、(自聯(lián)結查詢)

先對salaries進行自聯(lián)結查詢,當s1<=s2鏈接并以s1.salary分組,此時count的值,即薪資比他高的人數(shù),用having篩選count=2 的人,就可以得到第二高的薪資了;

查詢語句如下:

select
	E.empId,E.gender,E.hire_date,S.salary
from
	employees E join salaries S 
on 
	E.empId = S.empId
where S.salary=
	(
    select 
        s1.salary
    from 
        salaries s1 join salaries s2 
    on 
        s1.salary <= s2.salary
    group by 
        s1.salary              
  	having
  	 count(distinct s2.salary) = 2
    );
-- ---------------查詢結果------------ --
+-------+--------+------------+--------+
| empId | gender | hire_date  | salary |
+-------+--------+------------+--------+
| 10004 | M      | 1986-12-01 |  74057 |
+-------+--------+------------+--------+

3、(自聯(lián)結查詢優(yōu)化版)

原理和2相同,但是代碼精簡了很多,上面兩種是為了引出最后這種方法,在很多時候group by和order by都有其局限性,對于俺們初學者掌握這種實用性較廣的思路,還是很有意義的。

select
	E.empId,E.gender,E.hire_date,S.salary
from
	employees E join salaries S 
on
    S.empId =E.empId
where
    (select count(1) from salaries where salary>=S.salary)=2;
-- ---------------查詢結果------------ --
+-------+--------+------------+--------+
| empId | gender | hire_date  | salary |
+-------+--------+------------+--------+
| 10004 | M      | 1986-12-01 |  74057 |
+-------+--------+------------+--------+

初淺總結,如有錯誤,還望指正。

總結

到此這篇關于MySQL不使用order by實現(xiàn)排名的三種思路的文章就介紹到這了,更多相關MySQL不用order by排名內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MySQL命令行導出與導入數(shù)據(jù)庫

    MySQL命令行導出與導入數(shù)據(jù)庫

    這篇文章主要為大家詳細介紹了利用命令行MySQL導出數(shù)據(jù)庫與導入數(shù)據(jù)庫的例子,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Mysql數(shù)據(jù)庫增量備份的思路和方法

    Mysql數(shù)據(jù)庫增量備份的思路和方法

    MySQL數(shù)據(jù)庫增量備份,在這之前修改我們的數(shù)據(jù)庫配置文件/etc/my.cnf開啟bin-log日志功能即可,下面小編給大家分享Mysql數(shù)據(jù)庫增量備份的思路詳解,一起看看吧
    2017-09-09
  • order?by?+?limit分頁時數(shù)據(jù)重復問題及解決方法

    order?by?+?limit分頁時數(shù)據(jù)重復問題及解決方法

    這篇文章主要介紹了order?by?+?limit分頁時數(shù)據(jù)重復,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • MySQL使用UUID_SHORT()的問題解決

    MySQL使用UUID_SHORT()的問題解決

    MySQL的UUID_SHORT()函數(shù)是一個用于生成短UUID的函數(shù),該函數(shù)返回一個64位的整數(shù),可以用于唯一標識一條數(shù)據(jù)記錄,本文介紹了MySQL使用UUID_SHORT()的問題解決,感興趣的可以了解一下
    2023-08-08
  • mysql在update,非主鍵索引更新引起死鎖問題

    mysql在update,非主鍵索引更新引起死鎖問題

    這篇文章主要介紹了mysql在update,非主鍵索引更新引起死鎖問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Mysql導出數(shù)據(jù)的正確方法

    Mysql導出數(shù)據(jù)的正確方法

    想在Mysql命令行下導出數(shù)據(jù)庫,但就是每天提示不那個錯誤,后來才知道其實mysqldump不是mysql命令,因此不能在Mysql命令行下導出。
    2011-05-05
  • MySQL中查詢字段為空或者為null的方法

    MySQL中查詢字段為空或者為null的方法

    這篇文章主要介紹了MySQL中查詢字段為空或者為null的方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • mysql安裝數(shù)據(jù)庫初始化失敗問題解決方法保姆級教程

    mysql安裝數(shù)據(jù)庫初始化失敗問題解決方法保姆級教程

    這篇文章主要給大家介紹了關于mysql安裝數(shù)據(jù)庫初始化失敗問題解決方法保姆級教程,包括更改電腦名稱、確保防火墻設置、清理殘留文件、檢查權限和配置文件等,需要的朋友可以參考下
    2025-01-01
  • Mysql的基本函數(shù)與自定義函數(shù)用法

    Mysql的基本函數(shù)與自定義函數(shù)用法

    這篇文章主要介紹了Mysql的基本函數(shù)與自定義函數(shù)用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Mysql 5.6.37 winx64安裝雙版本mysql筆記記錄

    Mysql 5.6.37 winx64安裝雙版本mysql筆記記錄

    機器上現(xiàn)在已經(jīng)存在5.0版本MySQL的情況下裝一個最新版的mysql,下文通過實例代碼給大家介紹Mysql 5.6.37 winx64安裝雙版本mysql筆記記錄,感興趣的朋友一起看看吧
    2017-07-07

最新評論

从江县| 昌江| 平凉市| 白城市| 闽侯县| 海宁市| 邵武市| 神池县| 拉孜县| 宁海县| 荆州市| 沧源| 鸡东县| 梨树县| 旅游| 铁岭县| 芜湖县| 武鸣县| 广宁县| 富民县| 温泉县| 牡丹江市| 万州区| 新宾| 达日县| 洛南县| 嘉峪关市| 张家川| 区。| 读书| 上思县| 垦利县| 洮南市| 祁连县| 凤凰县| 贡山| 罗田县| 白沙| 定南县| 富民县| 乌苏市|