2

オリンピックのデータベースがあります。基本的なレイアウトは、competitornum、givenname、familynameの競合テーブルがあります(これには他の列は必要ありません)。competitornumと場所(1から8の間)の結果テーブルもあります。

名と家族の名前、および金、銀、銅メダルの総数を取得しようとしています(場所= 1、2、または3)

これが私がこれまでに得たものです:

SELECT c.Givenname, c.Familyname, places AS TotalPlaces
FROM Competitors c,
        (SELECT COUNT(*) as places 
         FROM Results r, Competitors c 
         WHERE r.Competitornum = c.Competitornum
         AND r.Place > 0
         AND r.Place < 4) q

ただし、全員の名前と同じ合計場所(たまたま78)が返されます。例えば

John Smith 78
Cassandra Jane 78
Bob Turner 78
4

1 に答える 1

1

現在、あなたの質問はCROSS JOINケルテシアン製品の生産を行っています。

集計関数(count、max、min、...)を使用する場合、レコードは非集計列でグループ化する必要があります。これを試して、

SELECT c.Givenname, c.Familyname, COUNT(r.places) AS TotalPlaces
FROM Competitors c INNER JOIN Results r
        ON r.Competitornum = c.Competitornum
WHERE r.place IN (1,2,3)
GROUP BY c.Givenname, c.Familyname
于 2012-09-11T01:02:18.307 に答える