在 MySQL 中选择 COUNT of MAX

poP*_*uru 4 mysql sql subquery aggregate-functions

我有两个表:Score table和Teams table。它们都包含其他表中的一些外键,但就我而言,我不需要其他表中的列。

我想得到team id and points一个SELECT query. 这些点是从 a 中得出的COUNT of MAX score of a team per round。

Score table:

ID 回合编号 团队 ID 分数
1085e36b-7621-4634-93e2-c5404108ed23 424d4186-4432-4b8d-ab9d-00ee71945cf6 752f9ebc-7016-42f2-be90-768711fc3d46 18
47ff3765-6357-47bc-abb8-6b5adf436546 424d4186-4432-4b8d-ab9d-00ee71945cf6 90dd8de4-8ddc-46cd-8b67-d93edbede174 7
b26b1a5b-8606-4c08-b838-30fdbcf98697 3fbb49a0-7a8a-4db5-b854-84a9ce7ac2b3 90dd8de4-8ddc-46cd-8b67-d93edbede174 20
c1add78a-94a3-48cf-b89d-4e4500ab738d 3fbb49a0-7a8a-4db5-b854-84a9ce7ac2b3 752f9ebc-7016-42f2-be90-768711fc3d46 21

Teams table:

ID 姓名 比赛ID
2b56a499-9fc4-40c2-a7c4-43762c2b27e7 2@1.com 和 4@1.com 9aaa6f86-5555-49b8-99a6-900a90dc3c7c
752f9ebc-7016-42f2-be90-768711fc3d46 5@1.com 和 3@1.com 9aaa6f86-5555-49b8-99a6-900a90dc3c7c
7c9aa32a-ff99-4169-9512-27bc0aac0093 7@1.com 和 6@1.com 9aaa6f86-5555-49b8-99a6-900a90dc3c7c
90dd8de4-8ddc-46cd-8b67-d93edbede174 8@1.com 和 1@1.com 9aaa6f86-5555-49b8-99a6-900a90dc3c7c

正如您所看到的team have a tournament_id foreign key from a Tournaments table,Score table have a round_id foreign key from a Rounds table但我在此步骤中不需要这些详细信息。

正如您在 中看到的Score table,对于 around有two records, one for each team that plays in that round,我想知道任何团队赢得一轮比赛的次数(这就是为什么我猜测我需要 MAX 计数)。

我的SELECT query,我尝试过:

SELECT team_id, count(max(score)) as points FROM Score
WHERE team_id IN (SELECT DISTINCT t.id 
    FROM Teams t
    WHERE t.tournament_id = '9aaa6f86-5555-49b8-99a6-900a90dc3c7c')
GROUP BY round_id
Run Code Online (Sandbox Code Playgroud)

但这query给我带来了错误代码:1111. Invalid use of group function。

预期结果 :

团队 ID 点
752f9ebc-7016-42f2-be90-768711fc3d46 2
90dd8de4-8ddc-46cd-8b67-d93edbede174 0

我该如何达到想要的结果?

感谢您的时间!如果有不清楚的地方或者需要更多细节,请告诉我!

D-S*_*hih 5

如果我理解正确,您可以尝试OUTER JOIN使用子查询,每个 round_id 都会获得最大分数

SELECT s.team_id,
       COUNT(m_Score)
FROM Score s 
LEFT JOIN 
(
    SELECT round_id,MAX(score) m_Score
    FROM Score 
    GROUP BY round_id
) t1 ON t1.m_Score = s.Score and t1.round_id = s.round_id
WHERE team_id IN (
    SELECT t.id 
    FROM Teams t
    WHERE t.tournament_id = '9aaa6f86-5555-49b8-99a6-900a90dc3c7c'
)
GROUP BY s.team_id
Run Code Online (Sandbox Code Playgroud)

sqlfiddle

  • 是的,它起作用了,这是我的错误,我试图嵌套这些聚合函数,但它应该与子查询一起使用。感谢您的时间和理解!(我已经尝试过我的数据并且它有效) (2认同)