複数のオーダーを販売した者のいずれよりも小さい給料を持っている従業員を取得します

masteroscar:

長いタイトルのために申し訳ありませんが、私は状況を説明したかったです。

私の脳は、ほとんど私が今5時間のためにこれを試してみましたが爆発している、と私はそれを得ることはありません。ちょうど大きな頭痛の種を手に入れました。

私は1件のまたは複数のオーダーを販売している人たちの誰よりも小さな給与をHAEC従業員を取得したいです。二つのテーブルがあるEMPLOYEESORDERS

EMPLOYEESこれらの列を持っています。名、姓、社会保障番号、給与。

ORDERSこれらの列を持っています。社会保障番号、受注コード

これは、これまでの最適なソリューションです。

SELECT H.SOCSECNUM, H.LASTNAME, H.FIRSTNAME, H.SALARY
FROM EMPLOYEES H
WHERE H.SALARY < ALL(SELECT COUNT(T.ORDERID)
                     FROM ORDERS T
                     WHERE  H.SOCSECNUM = T.SOCSECNUM
                     HAVING COUNT(T.ORDERID) > 0
                     );

私は、get、社会保障番号、0以上の受注を販売し、誰よりも小さな給料を持っているすべての従業員の名前と給与のようにこのことを理解しています。

私は愚かなAMまたはその中で何が間違っているのですか?さて、これは0注文を持つすべての従業員を表示します。私は0に変更した場合 - > 1をそれが1つの以下の注文を持っているすべての従業員を表示します。

GMB:

私はそれはあなたが書きたかったクエリだと思います。

select e.*
from employees e
where h.salary < all (
    select h1.salary
    from employees e1
    where exists (select 1 from orders o1 where o1.socsecnum = e1.socsecnum)
)

サブクエリは、少なくとも一つの売却を行った従業員の給与のリストを返します。その後、使用することができるallことに対して、テーブルをフィルタリングします。

また、集計を使用することができます。

select e.*
from employees e
where h.salary < (
    select min(h1.salary)
    from employees e1
    where exists (select 1 from orders o1 where o1.socsecnum = e1.socsecnum)
)

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=378057&siteId=1