176、第二の高い給料--leetcode
7925 ワード
テーマの説明アルゴリズム:異なる賃金を降順に並べ替え、 distinct:重複した値を削除します。戻り値は重複した値を含むかもしれません。本題はプラスしないと、彼のその設定の重複値のテスト用例に通じません。 IFNULL(xxx,null):戻り値処理 AS xxx:別名を取る limit 1 offset 1:第二条 を取る。 order by xxx desc:フィールドxxxの降順に並べ替えられた 注:この問題は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:IFNULL
とLIMIT
の部分句を用いて、「NULL」問題を解決する別の方法は、「IFNULL」関数を使用することである。select
IFNULL(
(select distinct
Salary
from
Employee
order by
Salary
limit 1 offset 1),NULL)
as
SecondHighestSalary
いくつかの技術的なものは積み重ねます。