0
**部門テーブル名**
**フィールド名が続きます**

 id , empid ,salary , departid ,status

mysqlで単一のクエリを使用して、各部門から上位2つの最高給与を取得する方法

4

3 に答える 3

10
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でも機能すると思います。

于 2013-06-13T10:21:04.377 に答える
9

試す

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 つ) を除外します。

于 2013-06-13T10:12:40.010 に答える
1

私はこれがあなたが望むものだと信じています。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

    )

これはおそらく最も効率的なクエリではありませんが、機能します。

于 2013-06-13T10:07:21.657 に答える