gpt4 book ai didi

mysql - 在数据库 SQL 中选择获奖女性

转载 作者:行者123 更新时间:2023-11-30 21:49:41 25 4
gpt4 key购买 nike

我想知道我应该如何在我的数据库中检索获胜的女性。比赛的获奖男女分别是:

Ed Reynolds 男子 41 分钟

Erna Obrien 女 43 分钟

可以使用

检索获胜者

MIN(performance_in_minutes) 因为那时我将获得总冠军,而这恰好是一名男子

但是我如何找回获胜的女性呢?我尝试了以下查询,但这行不通...

SELECT A.Fname, A.Sex, PI.Performance_in_minutes
from athlete as A LEFT OUTER JOIN participation_ind as PI on A.athleteID = PI.athleteID
WHERE eventID = 35
AND PI.Performance_in_minutes =
(SELECT MIN(PI.performance_in_minutes) FROM participation_ind PI WHERE PI.eventID = 35 AND A.Sex = 'F')

最佳答案

您的查询有两个问题。


您的子查询尝试为女性获取事件 35 的最短时间。不幸的是,在您有 A.sex = 'f' 的地方,您的内部查询在任何地方都没有 A 表。 (您还需要在子查询中的 athlete 表中包含 JOIN。)

AND PI.Performance_in_minutes = (
SELECT MIN(PI.performance_in_minutes)
FROM participation_ind PI
INNER JOIN athlete A ON A.athleteID = PI.athleteID
WHERE PI.eventID = 35
AND A.Sex = 'F'
)

如果不这样做,您的子查询的 WHERE 子句将引用外部查询的 A 表。这没有完成任何事情。


然后,您还需要将外部查询过滤为仅针对女性...(如果您不这样做,并且男性运动员恰好与获胜的女性运动员同时完成比赛,那么男运动员也将返回。)

SELECT
A.Fname, A.Sex, PI.Performance_in_minutes
FROM
athlete A
INNER JOIN
participation_ind PI
ON A.athleteID = PI.athleteID
WHERE
PI.eventID = 35
AND A.Sex = 'F'
AND PI.Performance_in_minutes = (
SELECT
MIN(PI.performance_in_minutes)
FROM
athlete A
INNER JOIN
participation_ind PI
ON A.athleteID = PI.athleteID
WHERE
PI.eventID = 35
AND A.Sex = 'F'
)


如果您知道只有一个 赢家,这可以大大简化。但是子查询版本更好,因为它解决了两个或更多运动员并列第一的罕见情况。


您还可以通过加入子查询来减少代码中的一些重复,而不是在 WHERE 子句中使用它。

SELECT
A.Fname, A.Sex, PI.Performance_in_minutes
FROM
(
SELECT
PI.eventID,
A.Sex,
MIN(PI.performance_in_minutes) AS performance_in_minutes
FROM
participation_ind PI
INNER JOIN
athlete A
ON A.athleteID = PI.athleteID
GROUP BY
PI.eventID,
A.Sex
)
winning_times
INNER JOIN
participation_ind PI
ON PI.eventID = winning_times.eventID
AND PI.performance_in_minutes = winning_times.performance_in_minutes
INNER JOIN
athlete A
ON A.athleteID = PI.athleteID
AND A.Sex = winning_times.Sex
WHERE
winning_times.eventID = 35
AND winning_times.Sex = 'F'

现在您可以更改要分析的事件或性别,只需更改一个 WHERE 子句,而不是两个。

关于mysql - 在数据库 SQL 中选择获奖女性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47803903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com