Mysql 在';其中';条款

Mysql 在';其中';条款,mysql,sql,subquery,Mysql,Sql,Subquery,我有这个模式: CLUB(Name, Address, City) TEAM(TeamName, club) PLAYER(Badge, teamName) MATCH(matchNumber, player1, player2, club, winner) 我需要进行以下查询: 对于每个俱乐部,找出该俱乐部中获胜的球员人数 至少两场比赛 我写道: SELECT teamName From TEAM t join Match m1 on t.club=m1.club WHERE Q2 >

我有这个模式:

CLUB(Name, Address, City)
TEAM(TeamName, club)
PLAYER(Badge, teamName)
MATCH(matchNumber, player1, player2, club, winner)
我需要进行以下查询:

对于每个俱乐部,找出该俱乐部中获胜的球员人数 至少两场比赛

我写道:

SELECT teamName
From TEAM t join Match m1 on t.club=m1.club
WHERE Q2 >= ALL Q1
问题1:

问题2:

我不知道这是否正确,但是我听说在我面对两项指控时使用这种形式不是最好的。为什么?

试试这个查询

SELECT t.club, COUNT(*)
FROM TEAM t
JOIN PLAYER p ON p.teamName = t.TeamName
JOIN (
    -- Won at least 2 matches.
    SELECT club, winner, COUNT(*) AS TheCount
    FROM MATCH
    GROUP BY club, winner
    HAVING COUNT(*) > 1
) w ON w.winner = p.badge AND w.club = t.club
GROUP BY t.club

试着这样做:

SELECT club, COUNT(*) as PlayerCount
FROM (SELECT club, winner
      FROM match
      GROUP BY club, winner
      HAVING COUNT(*) > 1) a
GROUP BY club
内部查询应将结果限制为具有2个或更多胜利的俱乐部/球员组合,外部查询将统计每个俱乐部的这些球员数量

我不知道这是否正确,但是我听说在我面对两项指控时使用这种形式不是最好的。为什么?


如果需要,比较两个count子查询是可以的,但是一个好的经验法则是尽可能少地命中每个表。使用多个子查询最终会多次命中每个表,通常会导致更长的执行时间。

编辑问题添加一些示例数据和所需结果将非常有用。您好。你不需要数数就能找到足够的球杆。你只需要确定每个俱乐部的分组就可以有两排同一个获胜者但不同的比赛。这是一个常见问题,如果你清楚地表达了自己的想法,你可以通过谷歌找到。请总是用谷歌搜索你的问题/问题/目标的许多清晰、简洁和具体的版本/措辞,并阅读许多答案。将发现的相关关键字添加到搜索中。如果你找不到答案,就发布,使用一种变体搜索你的标题和标签的关键词。
SELECT t.club, COUNT(*)
FROM TEAM t
JOIN PLAYER p ON p.teamName = t.TeamName
JOIN (
    -- Won at least 2 matches.
    SELECT club, winner, COUNT(*) AS TheCount
    FROM MATCH
    GROUP BY club, winner
    HAVING COUNT(*) > 1
) w ON w.winner = p.badge AND w.club = t.club
GROUP BY t.club
SELECT club, COUNT(*) as PlayerCount
FROM (SELECT club, winner
      FROM match
      GROUP BY club, winner
      HAVING COUNT(*) > 1) a
GROUP BY club