我有两张桌子:Score tableTeams table.它们都包含来自其他表的一些外键,但在我的例子中,我不需要来自其他表的列.

我想拿到SELECT query分的team id and points分.这些要点是由一个COUNT of MAX score of a team per round点组成的.

Score table:

id round_id team_id score
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 name tournament_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 tableScore table have a round_id foreign key from a Rounds table,但在这一步中我不需要这些细节.

正如你在Score table中看到的,对于round,有two records, one for each team that plays in that round个,我想要know for any team how many times did it won a 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

但这query美元却把Error Code: 1111. Invalid use of group function美元抛给了我.

预期结果:

team_id points
752f9ebc-7016-42f2-be90-768711fc3d46 2
90dd8de4-8ddc-46cd-8b67-d93edbede174 0

我该如何达到预期的结果?

谢谢你抽出时间!如果有什么不清楚或应该有更多的细节,让我知道!

推荐答案

如果我理解正确的话,你可以用子查询试试OUTER JOIN,每轮都能得到最大分数

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

sqlfiddle

Mysql相关问答推荐

如何获得表中只有最大值行的一个列被另一个列分区?

如何在Sequelize中将查询作为选项?

无法删除或更新父行:外键约束无法删除表

SQL/Pyspark -判断条件

最终的自联表是如何记住关联的呢?

SQL Select 最大值和平均值

基于其列之一内的值查询模型

如何编写一个查询,计算表中每个日期的一个日期加上前 4 天的记录数?

错误1075:表定义不正确;只能有一个自动列,它必须定义为一个键(使用 gorm 和 mysql)

当查询 MySQL 的 goroutine 过多时,Go 会出现panic

进行 MySQL COUNT 查询

在 MySQL 中为多列创建索引以进行查询优化

在mysql中将纪元数转换为人类可读的日期

Ansible 幂等 MySQL 安装 Playbook

如何通过一个查询批量更新 mysql 数据?

INSERT ... 使用 WHERE 进行重复的密钥更新?

哪个更好 - 许多小桌子或一张大桌子?

如何将数组存储到mysql中?

SELECT INTO 和未声明的变量错误

如何从邮箱地址中 Select 域名