(对不起标题,想不出怎么解释)
所以我有一个奥林匹克数据库,基本的布局是有竞争对手的表,其中包含竞争对手,给定名称和姓氏(其他列不是必需的)还有一个带竞争对手的结果表和地点(在1和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子句。
答案 0 :(得分:4)
你需要有另一个子查询,
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
)
)
答案 1 :(得分: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
)
)