0

私はテーブル構造を持っています

Emp_id  Emp_name    Emp_sal Depat
1       AB          10000   A
2       CB          12000   A
3       DA          7000    B
4       SB          2000    B
5       WE          6000    A
6       CF          10000   B
7       AK          8000    C
8       LM          6000    C

出発グループごとの最大 emp_sal としての結果が必要です

Emp_name Emp_sal 出発
CB12000A
CF10000B
AK8000C

私は次のようにクエリを書きました:

SELECT DISTINCT (emp_sal) , depart from emp 
group by depart
having emp_sal = (select max(emp_sal) from emp group by depart  )

しかし、これはうまくいきませんでした。他のいくつかのクエリを試しましたが、望ましい結果が得られませんでした。

4

3 に答える 3

2

述べたように質問に答えるには:

select max(emp_sal), depart
from emp 
group by depart

ただし、各部門の最高給与を含む行全体が必要だと思われます。

select emp_name, emp_sal, depart
from (select * from emp order by emp_sal desc) x
group by depart

注:これはmysqlのみのソリューションです(奇抜なグループを使用)が、質問にはmysqlのタグが付けられており、これは機能します:)

于 2013-04-18T18:58:45.583 に答える
0

グループに対して Emp_sal が一意であるかどうかを問い合せます:

SQLFIDDLE例

SELECT 
t1.Emp_name,
t1.emp_sal,
t1.Depat 
FROM emp t1
WHERE  t1.emp_sal = (SELECT max(t2.emp_sal) 
                    FROM emp t2 
                    WHERE t2.Depat = t1.Depat)

グループごとに一意でない場合:

SELECT 
t1.Emp_name,
t1.emp_sal,
t1.Depat 
FROM emp t1
WHERE  t1.Emp_id = (SELECT t2.Emp_id 
                    FROM emp t2 
                    WHERE t2.Depat = t1.Depat
                    ORDER BY t2.Emp_sal DESC
                    LIMIT 1)

結果:

| EMP_NAME | EMP_SAL | DEPAT |
------------------------------
|       CB |   12000 |     A |
|       CF |   10000 |     B |
|       AK |    8000 |     C |
于 2013-04-19T14:18:38.960 に答える