0

(对不起标题,想不出怎么解释)

所以我有一个Olympic 数据库,基本布局是有一个包含competitornum、givenname 和familyname 的竞争者表(其他列不是必需的)还有一个包含竞争者数字和位置(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 回答