有人询问有关奥运数据库的问题。
“对于参与多个活动的每位参赛者,请列出他们的名字,姓氏,活动数量以及最佳和最差位置(以及其他数据)。 按照事件数量的降序(即大多数事件优先)列出此信息, (当竞争对手的事件数量相同时),按照最佳位置的升序排列, 和(当同一个最好的地方)然后按最坏的地方的升序排列, (当时同一个最差的地方)然后按姓氏的升序排列。“
我一直在尝试编写查询来执行此操作,但它不会返回正确的计数。它在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
这是我到目前为止提出的查询,并且不确定我的错误。
答案 0 :(得分:2)
您不希望在GROUP BY子句中包含place
。
您需要一个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;
答案 1 :(得分:0)
试试这个,从GROUP BY中移除地点
Group by c.Givenname, familyname
答案 2 :(得分:0)
从group by子句中删除place字段,然后尝试运行查询。