この質問は主に、面接時に、新入生または1年の経験を持つ候補者からの質問です。私からのこの質問でさえ、私がWeb開発の分野でやってきたときかもしれません。
そこで、2番目またはn番目に高い給与を見つけるためのいくつかの可能な方法を紹介します。
Expの場合:従業員テーブル(ET)
EID | 従業員名 | 給与 |
---|---|---|
1 | 従業員-1 | 20,000 |
2 | 従業員-2 | 22,000 |
3 | 従業員-3 | 21,000 |
4 | 従業員-4 | 19,000 |
5 | 従業員-5 | 21,000 |
1:-n番目に高い給与を見つける方法条件なし
この場合、SQLの非常に基本的な制限と最大の方法を使用できます
SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT n-1,1
ここで、nは探している位置です
n=2の場合クエリは次のようになります
SELECT DISTINCT(state_id) FROM crm_cities ORDER BY state_id DESC LIMIT 1,1
出力は次のようになります:21,000
2:-条件が2番目に高い給与の従業員をすべて見つける必要がある場合にn番目に高い給与をすべて見つける方法。
この場合、SQLのサブクエリ機能を使用できます。
SELECT Salary FROM ET WHERE Salary = (SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT n-1,1)
ここで、nは探している位置です
n=2の場合クエリは次のようになります
SELECT Salary FROM ET WHERE Salary = (SELECT DISTINCT(Salary) FROM ET ORDER BY Salary DESC LIMIT 1,1)
出力は次のようになります:21,000、21,000
3:-LIMIT条件を使用せずに2番目に高い給与を見つける方法。
この場合、SQLでNOTIN条件を使用できます
SELECT MAX(Salary) FROM ET WHERE Salary NOT IN (SELECT MAX(Salary) FROM ET)
出力は次のようになります:21,000
4:-LIMITとサブクエリを使用せずに2番目に高い給与を見つける方法
この場合、自己結合方式を使用できます
SELECT MAX( E1.Salary ) FROM ET E1, ET E2 WHERE E1.Salary < E2.Salary Output will be: 21,000
これがあなたの必要に応じて正しい答えを見つけるのに役立つことを願っています..🙂