0

(タイトルですみません、どう説明したらいいのか思いつきませんでした)

だから私はオリンピック データベースを持っています。基本的なレイアウトは、competitornum、givenname、および familyname (これには他の列は必要ありません) を含む競技者テーブルがあることです。また、competitornum と場所 (1 から 8 の間) を含む結果テーブルもあります。

姓名と金メダル、銀メダル、銅メダルの合計数を取得しようとしています (位 = 1、2、または 3)

また、メダルの数が多い結果のみを表示する必要があり、これらすべてを Order By 句を使用せずに表示する必要があります...

以前にこの質問をしたのですが、言い忘れたことに気づきましたが、太字部分が追加される前の以前の回答は次のとおりでした。

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

次のような別のサブクエリが必要だと思います

AND TotalPlaces = (SELECT MAX(TotalPlaces))

しかし、サブクエリの上にあるときにサブクエリでエイリアスを使用する方法がわかりません...

すべての助けに感謝します、ありがとう!

編集:私の割り当てに関する公式の質問(答えがわかりません。本当に試しました。それが私がここにいる理由です):

最も多くのメダルを獲得した競技者は? (金、銀、銅をすべて合計して)? 彼らの姓と名、およびメダルの総数 (のみ) をリストします。

警告: ソリューションでは、競合他社の名前が常に異なると想定してはなりません 。このクエリのどの部分でも、ORDER BY 句を使用しないでください。

4

2 に答える 2

3

これには別のサブクエリが必要です。

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
HAVING COUNT(r.places) = 
            (
                SELECT MAX(TotalPlaces)
                FROM
                (
                    SELECT COUNT(g.places) AS TotalPlaces
                    FROM Competitors f 
                    INNER JOIN Results g ON f.Competitornum = g.Competitornum
                    WHERE g.place IN (1,2,3)
                    GROUP BY f.Givenname, f.Familyname
                )
            )
于 2012-09-11T01:51:35.487 に答える
0

最終的な回答 (John Woo と lc に感謝します。) 将来この質問に出くわした人のために、これをここに貼り付けました。

SELECT c.Givenname, c.Familyname, COUNT(r.place) AS TotalPlaces
FROM Competitors c 
INNER JOIN Results r ON r.Competitornum = c.Competitornum
WHERE r.place IN (1,2,3)
GROUP BY c.competitornum, c.Givenname, c.Familyname
HAVING COUNT(r.place) = 
            (
                SELECT MAX(TotalPlaces)
                FROM
                (
                    SELECT COUNT(r.place) AS TotalPlaces
                    FROM Competitors c 
                    INNER JOIN Results r ON r.Competitornum = c.Competitornum
                    WHERE r.place IN (1,2,3)
                    GROUP BY c.competitornum, c.Givenname, c.Familyname
                )
            )
于 2012-09-11T02:01:22.753 に答える