現在、Oracle Database 10gのデータベースでGROUP BY文に問題が発生しています。問合せによるOracle Database 10gグループ
このデータベースには、広告、スタッフ、StaffGrade、StaffOnAdという4つのテーブルがあります。私が照会しようとしているのは、3人以上のスタッフが働いている広告のためのものです。その広告タイトルと、2より大きい支払い等級のスタッフの人数を記載します。
以下は私の試みです:
SELECT Camp.Title
FROM Campaign Camp
LEFT JOIN WorksOn Wo ON Camp.Title = Wo.Title
LEFT JOIN Staff Stf ON Wo.StaffNo = Stf.StaffNo
LEFT JOIN StaffOnGrade StfOGrde ON Stf.StaffNo = StfOGrde.StaffNo
WHERE StfOGrde.Grade > 2 AND Camp.Title IN (SELECT Camp2.Title FROM Campaign Camp2
LEFT JOIN WorksOn Wo2 ON Camp2.Title = Wo2.Title
WHERE COUNT(Camp2.Title) > 3)
GROUP BY Camp.Title
私は上記で受信したエラーは次のとおりです。ORA-00934:グループ機能は、ここで
私の周りを検索し、基本的にそのエラーが、私はグループ化だ道が間違っていると言われますが許可されていませんが、私はそれがなぜなのか分かりません。また、私はちょうど上記のコードをフォーマットする正しい方法があるのだろうか?
何か助けていただければ幸いです。
注:
- 広告以下の表に関してはいくつかのより多くの情報は、基本的には、空気等の日付
- スタッフが自分の個人情報が記録されたに関するフィールドがあります。
- StaffGradeには、スタッフがどのような支払いをしているかが表示されます。
- StaffOnAdは、広告のタイトルである によって、どのスタッフがどの広告に掲載されているかを示します。
EDIT 1:コメントの後に、次の試み:ORA-00937:いない単一グループグループ機能
EDIT 2
SELECT Camp.Title
FROM Campaign Camp
LEFT JOIN WorksOn Wo ON Camp.Title = Wo.Title
LEFT JOIN Staff Stf ON Wo.StaffNo = Stf.StaffNo
LEFT JOIN StaffOnGrade StfOGrde ON Stf.StaffNo = StfOGrde.StaffNo
WHERE StfOGrde.Grade > 2 AND Camp.Title IN (SELECT Camp2.Title FROM Campaign Camp2
LEFT JOIN WorksOn Wo2 ON Camp2.Title = Wo2.Title
HAVING COUNT(Camp2.Title) > 3)
GROUP BY Camp.Title
しかし、私は新しいエラーを受信しました:
SELECT Camp.Title
FROM Campaign Camp
LEFT JOIN WorksOn Wo ON Camp.Title = Wo.Title
LEFT JOIN Staff Stf ON Wo.StaffNo = Stf.StaffNo
LEFT JOIN StaffOnGrade StfOGrde ON Stf.StaffNo = StfOGrde.StaffNo
WHERE StfOGrde.Grade > 2
AND Camp.Title IN
(SELECT Camp2.Title
FROM Campaign Camp2
LEFT JOIN WorksOn Wo2
ON Camp2.Title = Wo2.Title
GROUP BY Camp2.Title
HAVING COUNT(Camp2.Title) > 3
)
GROUP BY Camp.Title
この改定クエリではエラーはありません。しかし、表示されている唯一の結果は、広告のタイトルです。私はまた、2より大きいグレード支払いでその広告に取り組んでいるスタッフの量が必要です。私はちょうど最後のグループごとの声明がこの問題を修正すると仮定しましたが、必要とは思わない。
私はこれで混乱しています。私はそれを試して、それはデータが見つかりませんが返されます。グレードクとは何ですか?そしてそれはなぜケースステートメントの後ですか?また、totalstaffでは、それはStaffテーブルが正しいでしょうか? – George
inner selectには、totalstaffという2つの計算カラムがあり、広告に関連するスタッフの総数とgradeok(またはそれを呼び出す唯一のエイリアス)を計算します。これはcaseカラムのエイリアスです支払いグレードが2より大きいスタッフの数を計算します。テストできる場合は、インナーセレクトだけを実行してください。 – Aitor
私は、列の意味をクリアしようとするためにクエリを編集しました。 – Aitor