176、第二の高い給料--leetcode


テーマの説明SQLクエリを作成し、Employeeテーブルの中の第二の高い給料を取得します。
+----+--------+
| Id | Salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+
例えば、上記のEmployee表では、SQLは第二の高い給料として200に戻るべきだと問い合わせる。二番目に高い給料がないとnullに戻ります。
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200                 |
+---------------------+
アルゴリズムの設計と分析:方法1:サブクエリとLIMITサブフレーズを使用する。
  • アルゴリズム:異なる賃金を降順に並べ替え、LIMITサブ句を使って第二の高い賃金を獲得する。
  • select distinct
    	Salary as SecondHighestSalary
    from
    	Employee
    order by Salary desc
    limit 1 offset 1
    
    注意:もしこのようにすれば、第二の高い給料がないと、この解決策は「誤った方案」と判断されます。この問題を克服するために、私たちはそれを臨時表として使うことができます。
    select 
    	(select distinct
    		Salary
    	 from
    	 	Employee
    	 order by Salary desc
    	 limit 1 offset 1) as SecondHighestSalary
    ;
    
    方法2:IFNULLLIMITの部分句を用いて、「NULL」問題を解決する別の方法は、「IFNULL」関数を使用することである。
    select 
    	IFNULL(
    	(select distinct 
    		Salary
    	 from 
    	 	Employee
    	 order by 
    	 	Salary 
    	 limit 1 offset 1),NULL) 
    	 as 
    	 	SecondHighestSalary
    
    いくつかの技術的なものは積み重ねます。
  • distinct:重複した値を削除します。戻り値は重複した値を含むかもしれません。本題はプラスしないと、彼のその設定の重複値のテスト用例に通じません。
  • IFNULL(xxx,null):戻り値処理
  • AS xxx:別名を取る
  • limit 1 offset 1:第二条
  • を取る。
  • order by xxx desc:フィールドxxxの降順に並べ替えられた
  • 注:この問題はleetcodeの公式問題を参考にします。