我有这个模式:
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:
SELECT Count (Distinct winner)
FROM MATCH
WHERE match m join player p on m. winner=player.badge
GROUP BY teamName
问题2:
SELECT Count (distinct winner)
FROM match m2
WHERE m2.club=m1.club
我不知道这是不是正确的,但是我听说用这种形式,我面对两个计数不是最好的。为什么?
2条答案
按热度按时间t1rydlwq1#
尝试以下操作:
内部查询应将结果限制为有2个或更多胜利的俱乐部/球员组合,外部查询将统计每个俱乐部的这些球员的数量。
我不知道这是不是正确的,但是我听说用这种形式,我面对两个计数不是最好的。为什么?
如果需要,比较两个count子查询是可以的,但是一个好的经验法则是尽可能少地命中每个表。使用多个子查询最终会多次命中每个表,并且通常会导致更长的执行时间。
mrwjdhj32#
尝试此查询