2017-03-18 11 views
1

ゼロ以外の最小値を見つける問題があります。ゼロ以外のSQL最小値を見つける

たとえば、私は、各人が獲得した金額を示す表を持っていますが、そのうちのいくつかは何も得られません。私は何も得ていない人を除外し、最も少ない(ゼロ以外の)所得を得た人々の名前を見つけたいと思います。

私はこの試みた:

SELECT name, earnings 
FROM paylist 
WHERE earnings = (SELECT min(earnings) 
      FROM paylist) AND EXISTS (SELECT * 
             FROM paylist 
             WHERE earning <> 0) 

をしかし、私は分(利益が)ちょうど0になると、出力には値を返さないということに気づきました。 クエリの作成方法は?

また、私はこれを書くための二つの方法がある可能性が言われています:集約関数と 1.(例えばCOUNT、SUM、MAX、MIN) 2.任意の集約関数を使用せずに 違いは何ですか?

+0

可能な重複 http://stackoverflow.com/questions/2099720/mysql-find-min-but-not-zero –

+0

"find ** the ** person" - 1人だけの場合は、ORDER BYとLIMIT 1を使用できます。 –

+0

謝罪、私は質問を編集し、出力は、最も少ない収入の人々のすべての名前をリストする必要があります。 – Raycherr

答えて

1

副問合せの条件を使用して、ゼロの収益を持つ行を省略し、最小の収益を見つけて外部で使用します。

select name, 
    earnings 
from paylist 
where earnings = (
     select min(nullif(earnings,0)) 
     from paylist 
     ) 

差は最初のインデックス(存在する場合)を使用することができるということである:minは最小の非ヌル値を返すという事実を使用することができ

select name, 
    earnings 
from paylist 
where earnings = (
     select min(earnings) 
     from paylist 
     where earnings <> 0 
     ) 

または使用nullif。上記の二つは(何の凝集は必要ありません)あなただけの最低非ゼロの利益と1行をしたい場合は、あなたがlimitを使用することができ、最小非ゼロの利益

ですべての行を返します。

select * 
from paylist 
where earnings <> 0 
order by earnings 
limit 1 
関連する問題