2012-04-24 6 views
1

私はこのクエリを作成しましたが、これをグループ化してみると混乱します。 ,,,このクエリは実行されますが、私が望んでいたではないにせよ、私はグループにチーム名で問い合わせをしたいが、そのクエリはCOUNT(*)とそのカウント結果は同じ番号を生成を使用してカウントされているときに問題が発生しマイナスOracleの問題をグループ化する

SELECT TEAM.NAMATEAM, PERSONAL.KODEPERSON 
    FROM TEAM, PERSONAL 
    WHERE TEAM.KODETEAM = PERSONAL.KODETEAM 
GROUP BY PERSONAL.KODEPERSON, TEAM.NAMATEAM 

MINUS 

    SELECT TEAM.NAMATEAM, PERSONAL.KODEPERSON 
    FROM TEAM, PERSONAL, AWARD_PERSON 
    WHERE TEAM.KODETEAM = PERSONAL.KODETEAM 
    AND AWARD_PERSON.PEMENANG = PERSONAL.KODEPERSON 
GROUP BY TEAM.NAMATEAM, PERSONAL.KODEPERSON; 

私は私が望んでいたとしてスムーズに実行できる技術内のグループにないアイデアを持っていないので、これらすべてのチーム名を使用しますが使用してカウントが問題になるのグループにしたいです。ありがとうございました。

+1

私はあなたの質問を理解していません。あなたは何を達成しようとしていますか?つまり、どんな結果セットが必要ですか?決して賞を獲得していないすべてのチーム? – Ben

+0

コメントのおかげで、すでに以下のユーザーによって解決されました:) –

答えて

0

ご質問がありますか?あなたは列NAMATEAM、XはNAMATEAMがチーム名、Xが賞を持たない各チームの人数(AWARD_PERSONに記載されています)のテーブルを作成しようとしています。もしそうなら、あなたは副選択を使用することができるはずです。

SELECT T_NAME, COUNT(*) 
FROM (
    SELECT TEAM.NAMATEAM "T_NAME", PERSONAL.KODEPERSON 
    FROM TEAM, PERSONAL 
    WHERE TEAM.KODETEAM = PERSONAL.KODETEAM 
    MINUS 
    SELECT TEAM.NAMATEAM "T_NAME", PERSONAL.KODEPERSON 
    FROM TEAM, PERSONAL, AWARD_PERSON 
    WHERE TEAM.KODETEAM = PERSONAL.KODETEAM 
    AND AWARD_PERSON.PEMENANG = PERSONAL.KODEPERSON) 
    -- your original query without the GROUP BYs 
GROUP BY T_NAME 

SELECTは、選手の完全なリストを作成し、最初の副選択を、第二副選択は、SELECTは(私は仮定)賞を獲得した選手のリストを作成し、 MINUSは賞の受賞者を全リストから除外します。したがって、完全な副選択は、賞を持たないすべての選手に対して、選手とチームのリストを返す。

主なSELECTは、賞なし選手ごとのチーム数を得るために、唯一のチーム名をまとめたもの。

データベースに重複するローがない限り、元のGROUP BY TEAM.NAMATEAM、PERSONAL.KODEPERSONは必要ありません。たとえば、1チームの1人のプレイヤーがデータベースに複数のローを持っています。

+0

パーフェクト!あなたは私の質問をよく読んでいます。おかげで男 –

+0

は、 は、チームからチーム、合計(match_list.scorehome) "nomor" としてmatch_list.home = team.kodeteam UNIONがチームとして明確なteam.namateamを選択 match_list を明確なteam.namateamを選択します( から選択します*和(match_list.scoreaway)チームから "nomor"、match_list ここmatch_list.away = team.kodeteam )a.teamによって 基を表します。 これを修正できますか? –

+0

サブSELECTsで、全体のサブセレクトがプレイ、ホーム、または離れて試合ごとに1つの行(TEAM、NOMOR)を返すように、DISTINCTを削除します。次に、メインSELECTを使用して、 'チームをチームから選ぶ(SUM)(NOMOR)FROM(...)GROUP BY TEAM 'というチームで要約します。お役に立てれば。 –

関連する問題