1

このクエリを作成したばかりですが、これをグループ化するまでに混乱してしまいます。これは、それらを 1 つのグループとして見ることができないからです。このクエリは実行されますが、希望どおりには実行されません。チーム名でクエリをグループ化したいのですが、そのクエリが count(*) を使用してカウントされ、そのカウントの結果が同じ数になると問題が発生します ,,,

  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;

チーム名を使用してこれらすべてをグループ化したいのですが、必要に応じてスムーズに実行できるテクニック内でグループ化する方法がわからないため、カウントを使用すると問題が発生します。ありがとうございました。

4

1 に答える 1

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 はプレーヤーの完全なリストを作成し、2 番目のサブセレクト SELECT は賞を受賞したプレーヤーのリストを作成します (私は推測します)。MINUS は受賞者を完全なリストから削除します。したがって、完全なサブセレクトは、賞のないすべてのプレーヤーについて、プレーヤーとそのチームのリストを返します。

メインの SELECT は、チーム名のみを要約して、チームごとの賞のないプレーヤーの数を算出します。

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

于 2012-04-25T02:21:52.917 に答える