我想检索信息,特别是运动员的独特活动的名称和总数(我将其重命名为“运动多样性”。我想将进行更多活动的运动员排在首位,但我不是确定如何解决这个问题。
我也知道我应该在某个地方使用DISTINCT,但不确定将其放在何处。我也不知道如何按唯一/大多数活动进行排序。
SELECT athlete.name, COUNT(athlete.name) AS 'Sports Variety' FROM athlete
INNER JOIN athlete ON athlete.id = training_session.activity GROUP BY
training_session.activity HAVING COUNT(athlete) > 0
我希望它会返回6行。
答案 0 :(得分:1)
如果要查找活动最多的运动员,可以尝试使用LIMIT
查询:
SELECT
a.id,
a.name,
COUNT(*) AS num_activities
FROM athlete a
INNER JOIN training_session ts
ON a.id = ts.athelete_id
GROUP BY
a.id,
a.name
ORDER BY
COUNT(*) DESC
LIMIT 1;
我发现您当前的查询存在一些语法问题,例如第二个表名与第一个表名相同(此处不是您想要的名称)。请注意,我的查询无法处理两个或多个运动员可能碰巧具有相同活动量的可能性。为了解决这个问题,我们可以找到其他要排名的东西,或者重组查询。
答案 1 :(得分:1)
假设您有两个表,一个是名字运动员,一个是运动员名字,一个名字是training_session,用于与每个运动员相关的活动
SELECT athlete.name, COUNT(*) AS 'Sports Variety'
FROM athlete
INNER JOIN training_session ON athlete.id = training_session.athlete_id
GROUP BY athlete.name