2011-07-20 9 views
1

特定の列の最小値をHOLDSする行のさまざまな列を引き出すための最適化クエリは何でしょうか。SQLクエリ:テーブルの最小値を持つ行全体を取得

例えば名前とその中のわずか3列

Employee (Name, EmployeeType, Salary)

はEmployeeTypeが永続的または一時的なことができますがあり、以下の表から正社員のカテゴリに最低賃金を保持しているすべての人の給料を表示します
私はすでに解決策を知っていますが、もっと良い方法があると思います。
私のソリューションは、次のとおりです。

Select E.* from Employee Where 
Salary = (Select Min(Salary) From Employee Where EmployeeType='P') 
and EmployeeType='P' 
+0

あなたの質問はOKだと思います! (文法エラーを除いて 'E *を' * 'に変更する) – Bohemian

+0

@Bohemian:編集をありがとう、E. *は明示的に名前を挙げてすべての列を引っ張ってくれるというだけの方法でした –

+0

私は思ったもう一度EmployeeType Conditionを避けてください。 –

答えて

1

最低賃金が複数の従業員が共有されている場合は、使用してそれらのすべてを取得することができますがTOP (1) WITH TIES構造:

SELECT TOP (1) WITH TIES * 
FROM Employee 
WHERE EmployeeType = 'P' 
ORDER BY Salary 

参考:

5
SELECT TOP 1 * 
FROM Employee 
WHERE EmployeeType = 'P' 
ORDER BY Salary ASC 

MySQLでは、LIMIT 1を使用することができます。 Oracleでは、WITH rownum = 1と組み合わされた内部クエリを使用できます。

これは、最低給与を共有する複数の従業員がいる場合でも、常に1つの行を返します。これらの行のうちどれを返すかを指定する場合は、追加の列を追加することができます。

あなたの代わりにこのようなすべての行を返すようにしたい場合は、OPのクエリは最適のようになります。

SELECT * 
FROM Employee 
WHERE Salary = (
    SELECT MIN(Salary) 
    FROM Empoyee 
    WHERE EmployeeType = 'P' 
) 
AND EmployeeType = 'P' 
+0

2人の従業員が最低給与を持っている場合、トップ1は常に1行を返します –

+1

違反していませんが、私は4人がこれを投票して驚いています。等しい値 –

+0

はい!私は英語でもっと正確にすべきだった。私はまだそれを編集することができます。ありがとうございました。 –

関連する問題