SQL计数返回错误的值

时间:2012-09-07 04:09:13

标签: sql

有人询问有关奥运数据库的问题。

“对于参与多个活动的每位参赛者,请列出他们的名字,姓氏,活动数量以及最佳和最差位置(以及其他数据)。 按照事件数量的降序(即大多数事件优先)列出此信息, (当竞争对手的事件数量相同时),按照最佳位置的升序排列, 和(当同一个最好的地方)然后按最坏的地方的升序排列, (当时同一个最差的地方)然后按姓氏的升序排列。“

我一直在尝试编写查询来执行此操作,但它不会返回正确的计数。它在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

这是我到目前为止提出的查询,并且不确定我的错误。

3 个答案:

答案 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字段,然后尝试运行查询。