2

所以我有一个Olympic 数据库,基本布局是有一个包含competitornum、givenname 和familyname 的竞争者表(其他列不是必需的)还有一个包含竞争者数字和位置(1 到8 之间)的结果表。

我正在尝试获取名字和姓氏以及金牌、银牌和铜牌的总数(位置 = 1、2 或 3)

这是我到目前为止所得到的:

SELECT c.Givenname, c.Familyname, places AS TotalPlaces
FROM Competitors c,
        (SELECT COUNT(*) as places 
         FROM Results r, Competitors c 
         WHERE r.Competitornum = c.Competitornum
         AND r.Place > 0
         AND r.Place < 4) q

然而,它返回每个人的名字,以及相同的总位置(恰好是 78)。例如

John Smith 78
Cassandra Jane 78
Bob Turner 78
4

1 回答 1

1

目前,您的查询正在CROSS JOIN生产 caertesian 产品。

使用聚合函数(count、max、min、...)时,记录应按非聚合列分组。尝试这个,

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
于 2012-09-11T01:02:18.307 回答