2016-03-30 4 views
0

Oracle SQLスクリプトに問題があります。ほとんどの出版物ですべての著者(ログイン)を選択する必要があります。同じ数のパブリケーションのログインがさらにある場合は、それらをすべて選択する必要があります。SQL ORACLE - MAX()を使用しているほとんどのパブリケーション(ほとんどの行)の作成者を選択

SELECT P.LOGIN, COUNT(*) 
FROM PISE P 
GROUP BY P.LOGIN, HAVING COUNT(*) >= MAX(PUBLICATIONS) 
(
SELECT COUNT(*) AS PUBLICATIONS 
FROM PISE P 
GROUP BY P.LOGIN 
); 

ORA-00933が生じ:SQLコマンドが正常に

を終了していない list of publications looks like this:

私は...これまでのところ、私はこのような何かをやって試してみましたMAX()機能を使用するが必要

または

SELECT P.LOGIN, COUNT(*) as PUBLICATIONS 
FROM PISE P 
GROUP BY P.LOGIN HAVING PUBLICATIONS >= MAX(PUBLICATIONS); 

解像度"出版物":ORA-00904でulting無効な識別子

または

SELECT P.LOGIN, COUNT(*) 
    FROM PISE P 
    WHERE COUNT(*) IN (
    SELECT MAX(COUNT(*)) 
    FROM PISE 
    ); 

ORA-00934が生じ:グループ機能はここでは許可されていません。 (JmenoとPrijmeniカラムなし)

This is the result I am looking for

+1

なぜ出版物> = MAX(Publications)からではなく=(等しいですか)?もう1つの試みでは、なぜ "IN"の代わりにCOUNT(*)IN(SELECT MAX ...)と=(等価ではない)ですか?どちらの場合も、=が最も理にかなっています。また、著者のファーストネームとラストネームは元のテーブルにはありません。どのようにそれらを出力に表示しますか?おそらく結合が必要になるでしょう(最初と最後の名前が別のテーブルにある場合は、そうでなければなりません)が、それに関する情報はありませんでした。 – mathguy

+0

はい、> =を変更すると違いはありません。私がそこにあったものが、何とかそれを解決しようとしている間、私は心に来たすべてを試しました。 changin IN to =は同じ結果で終了します。 EDIT:名と姓は別のテーブルに含まれていますが、後で追加しますが、解決する必要があるものではないので無視します。言い換えれば、私は問題の根本に私の問題を単純化しようとしました。 – sKyTzi

+0

右 - 私はクエリを修正することを提案していませんでした(結局のところ、> =と "IN"は完全に合法です - 非効率的です)。最初のクエリの後ですぐにサブクエリを開始するため、クエリが失敗します。 WHERE句はそこにあるはずですが、WHERE句は存在しません。 GROUP BY句の後にのみ別名PUBLICATIONSが追加されるため(SELECT句で)、GROUP BY句の後に識別子 "PUBLICATIONS"(まだ)が存在しないため、2番目のクエリは失敗します。 – mathguy

答えて

0

(バージョン11以上で入手可能) "句で" 使用:

with a as (select login, count(*) as cnt from p group by login), 
    b as (select max(cnt) as max_cnt from a) 
select a.login, a.cnt from a, b where a.cnt = b.max_cnt 
/
+0

ORA-04044:プロシージャ、ファンクション、パッケージまたはタイプはここでは許可されていません 04044. 00000 - "プロシージャ、ファンクション、パッケージまたはタイプはここでは許可されていません" *原因:プロシージャ、ファンクションまたはパッケージがステートメント内に不適切な場所があります。 *処置:名前が正しいことを確認するか、削除してください。 私のバージョンは古いと推測します:) – sKyTzi

+0

??私が提供したのはSQLステートメントです。プロシージャや関数にラップしようとしましたか?おそらくそのバージョンとは関係ありません。確かにそのエラーメッセージではありません。私はOracleの私のバージョンでクエリをテストし、正常に動作します。あなたのバージョンは何ですか? select * from v $ – mathguy

+0

ところで、私は元のテーブルの名前として "p"を持っています(最初の行のコード);実際のテーブル名に変更してください。 – mathguy

関連する問題