質問

を考慮するOracle emp 表に示す。いてみたいと思い、従業員の給与と department = 20job = clerk.もとはありませんempno"の列に主キーを数列あります。できること:

select * from scott.emp
where deptno = 20 and job = 'CLERK'
and sal =  (select max(sal) from scott.emp
            where deptno = 20 and job = 'CLERK')

この作品にもしています複製、試験deptno=20job='係るように避けなければなりません。あまりエレガントに書かを使用 group by?ちなみに、この事項を使っていますので、Oracle社

役に立ちましたか?

解決

以下は少しオーバーではSQLのパターン"トップ×ます。

SELECT 
 * 
FROM 
 scott.emp
WHERE 
 (deptno,job,sal) IN
 (SELECT 
   deptno,
   job,
   max(sal) 
  FROM 
   scott.emp
  WHERE 
   deptno = 20 
   and job = 'CLERK'
  GROUP BY 
   deptno,
   job
  )

また、この作Oracle、Postgress(う)がMS SQL.も似MS SQL見る質問 SQLクエリーの最新価格

他のヒント

また特定のターゲットデータベースなったと思いマークが付ざソリューションだった一方言agnostic SQL*、

SELECT * 
FROM scott.emp e
WHERE e.deptno = 20 
AND e.job = 'CLERK'
AND e.sal = (
  SELECT MAX(e2.sal) 
  FROM scott.emp e2
  WHERE e.deptno = e2.deptno 
  AND e.job = e2.job
)

*このばあいの環境としていたことが分かりました。

Oracle思い解析機能はまだみのクエリに電磁ポンプテーブル回:

SELECT *
  FROM (SELECT e.*, MAX (sal) OVER () AS max_sal
          FROM scott.emp e
         WHERE deptno = 20 
           AND job = 'CLERK')
 WHERE sal = max_sal

でよりシンプルで読みやすくなり、より効率的です。

を編集したいでリスト一覧はこの情報はすべての部門でしょうをご利用の場合は、"パーティショニングによる"条項:

SELECT *
  FROM (SELECT e.*, MAX (sal) OVER (PARTITION BY deptno) AS max_sal
          FROM scott.emp e
         WHERE job = 'CLERK')
 WHERE sal = max_sal
ORDER BY deptno

ことになる。知らなかったのができるようにな比較(x、y、z)を選択します。この作品は大きますので、Oracle社

としての側面についての注意その他の読者は、上記のクエリーが欠落、"="後"(deptno、職業、sal)".(粉を山にして真ん中をスタックオーバーフローフォーマッタを食べたので(?).

再度、マークです。

Oracleにお使いいただけますが、場合にはになります。

たとえば---名前を選択し、 からのカット がカットに (選択cust_idからbig_table) 入>SYSDATE-1 いにはログインが必要です。

が 名前を選択し、 からのカット c が存在する (選択cust_idからbig_table がcust_id=c.cust_id ) 入>SYSDATE-1 う非常に高速に適切な索引をすることもできます複数のパラメータ。

多くのソリューション。きもオリジナルのクエリーレイアウトを追加するだけテーブルのエイリアス-接合のカラム名というだけDEPTNO=20JOB='係に照会します。

SELECT 
  * 
FROM 
  scott.emp emptbl
WHERE
  emptbl.DEPTNO = 20 
  AND emptbl.JOB = 'CLERK'
  AND emptbl.SAL =  
    (
      select 
        max(salmax.SAL) 
      from 
        scott.emp salmax
      where 
        salmax.DEPTNO = emptbl.DEPTNO
        AND salmax.JOB = emptbl.JOB
    )

そしてこのキーワードに"すべて"使用できるベンチャーキャピタルは、このクエリによって除す"最大"となる機能です。

SELECT 
  * 
FROM 
  scott.emp emptbl
WHERE
  emptbl.DEPTNO = 20 
  AND emptbl.JOB = 'CLERK'
  AND emptbl.SAL >= ALL  
    (
      select 
        salmax.SAL
      from 
        scott.emp salmax
      where 
        salmax.DEPTNO = emptbl.DEPTNO
        AND salmax.JOB = emptbl.JOB
    )

私のことは意味がある。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top