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

您不想包含place在 GROUP BY 子句中。

您将需要一个 ORDER BY 子句来满足所有要求。

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

试试这个,从 GROUP BY 中删除地点

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

从 group by 子句中删除 place 字段,然后尝试运行您的查询。

于 2012-09-07T04:18:06.583 回答