1

私は3つのフィールドを持つテーブルを持っていEMPLOYEEます:

EMPLOYEE(ROLE SMALLINT, RATING INTEGER, NAME VARCHAR)

このテーブルから取得する必要があるのは 3 行だけです。これは、そのタイプで最高の評価を持つ各タイプの 1 つの行です。フィールドの役割 - DEVELOPER(1)、TESTER(2)、MANAGER (3) の 3 つの値のリストから特定の役割を定義する判別式です。したがって、ROLE フィールドの値は 1 または 2 または 3 のいずれかになります。

4

3 に答える 3

3

これは基本的な集計クエリです (SQL の初心者を想定しています)。

select role, max(rating)
from employee
group by role

コメントに応えて(質問があいまいであることがわかります)。Postgres でこれを行う正しい方法は、ウィンドウ関数を使用することです。

select role, rating, name
from (select e.*,
             row_number() over (partition by role order by rating desc) as seqnum
      from employee e
     ) e
where seqnum = 1

このバージョンは、重複があっても 1 行のみを返します。同じ最大値を持つ倍数がある場合にすべての行が必要な場合は、rank()代わりに を使用しrow_number()ます。

于 2013-05-31T07:39:42.027 に答える
0

私があなたの質問を正しく理解していれば、役割ごとに最高評価の名前が必要です。

select role, rating, name
from employee as e1
where rating = (
  select max(rating) from employee
  where role = e1.role
)

ただし、同じ役割と評価を持つ 2 人の従業員がいる場合、これは正しく機能しません。その場合、サブクエリで名前を選択する必要があります。

于 2013-05-31T08:22:44.567 に答える