1

オリンピックデータベースに関して質問されました。

「複数のイベントに参加した各競技者について、名前、家族名、イベントの数、最高の場所と最悪の場所をリストします(他のデータはありません)。この情報を番号の降順でリストします。イベントの数(つまり、ほとんどのイベントが最初)、および(競合他社が同じ数のイベントを持っている場合)次に、最高の場所の昇順で、(同じ最高の場所の場合)次に、最悪の場所の昇順で、(同じ最悪の場合)場所)次に、家族名の昇順で。」

これを行うためのクエリを作成しようとしましたが、正しいカウントが返されません。2のカウントで停止し、正しい最小値または最大値を返しません。表は次のとおりです。

競合他社の表

Competitornum | Givenname | Familyname | Gender | Dateofbirth | CountryCode | 

結果表には

Eventid | Competitornum | Place | Lane | Elapsedtime | Note |

クエリ

SELECT c.Givenname, Familyname, COUNT(r.Competitornum), MIN(r.Place), MAX(r.Place)
FROM Competitors c
JOIN Results r 
ON c.Competitornum=r.Competitornum
Group by c.Givenname, familyname, place
Having Count(r.Competitornum) > 1

これは私がこれまでに思いついたクエリであり、何が間違っているのかわかりません。

4

3 に答える 3

2

placeGROUPBY句に含めたくありません。

また、すべての要件を満たすには、ORDERBY句が必要です。

SELECT c.GivenName, c.FamilyName, COUNT(r.CompetitorNum) events,
       MIN(r.Place) best_place, MAX(r.Place) worst_place
  FROM Competitors c
  JOIN Results r ON c.CompetitorNum = r.CompetitorNum
 GROUP BY c.GivenName, c.FamilyName
HAVING COUNT(r.Competitornum) > 1
 ORDER BY events DESC, best_place ASC, worst_place ASC, c.FamilyName ASC;
于 2012-09-07T04:17:26.270 に答える
0

これを試して、GROUPBYから場所を削除してください

Group by c.Givenname, familyname
于 2012-09-07T04:17:53.153 に答える
0

group by句からplaceフィールドを削除してから、クエリを実行してみてください。

于 2012-09-07T04:18:06.583 に答える