**部門テーブル名** **フィールド名が続きます** id , empid ,salary , departid ,status
mysqlで単一のクエリを使用して、各部門から上位2つの最高給与を取得する方法
**部門テーブル名** **フィールド名が続きます** id , empid ,salary , departid ,status
mysqlで単一のクエリを使用して、各部門から上位2つの最高給与を取得する方法
SELECT emp1.departid , emp1.salary
FROM Department emp1
WHERE (
SELECT COUNT(DISTINCT(emp2.salary))
FROM Department emp2
WHERE emp2.salary > emp1.salary and emp1.departid = emp2.departid ) in (0,1) group by emp1.departid , emp1.salary
このソリューションをSQLサーバーでテストしました。しかし、ms sqlでも機能すると思います。
試す
SELECT id, empid, salary, departid, status
FROM
(
SELECT id, empid, salary, departid, status,
@n := IF(@g = departid, @n + 1, 1) rownum,
@g := departid
FROM table1
ORDER BY departid, salary DESC
) q
WHERE q.rownum <= 2
これがSQLFiddleのデモです
給与に基づいて、各部門の各従業員のランクを内部選択で生成します。次に、外部選択で、ランクが 2 を超えるすべての行 (上位 2 つ) を除外します。
私はこれがあなたが望むものだと信じています。MySQL db atm にアクセスできないため、このクエリはテストされていないことに注意してください。
SELECT
d1.id,
d1.salary,
d1.departid
FROM department d
WHERE
d1.id IN
(
SELECT
d2.id
FROM department d2
WHERE
d2.departid = d1.departid
ORDER BY salary DESC
LIMIT 2
)
これはおそらく最も効率的なクエリではありませんが、機能します。