gpt4 book ai didi

mysql - 没有连接的 SQL 过滤行

转载 作者:行者123 更新时间:2023-12-01 09:50:57 24 4
gpt4 key购买 nike

我总是对不必要的加入感到“厌烦”。但是在这种情况下,我想知道是否可以不使用 join。

这是我的表的一个例子:

id | team | score
1 | 1 | 300
2 | 1 | 257
3 | 2 | 127
4 | 2 | 533
5 | 3 | 459

这就是我要的:
team | score | id
1 | 300 | 1
2 | 533 | 4
3 | 459 | 5

做一个看起来像这样的查询:
(基本上:谁是每支球队中最好的球员)
SELECT team, MAX(score) AS score, id
FROM my_table
GROUP BY team

但我得到了类似的东西:
team | score | id
1 | 300 | 1
2 | 533 | 3
3 | 459 | 5

但是得到533分的并不是第三位选手,所以结果没有一致性。

是否有可能在不加入表格的情况下获得真实的结果?如何做到这一点?

最佳答案

您可以使用如下子查询在没有连接的情况下执行此操作:

SELECT id, team, score
FROM table1 a
WHERE score = (SELECT MAX(score) FROM table1 b WHERE a.team = b.team);

但是,在大表中,这可能会非常慢,因为您必须为表中的每一行运行整个子查询。

但是,使用 join 过滤这样的结果并没有错:
SELECT id, team, score FROM table1 a
INNER JOIN (
SELECT MAX(score) score, team
FROM table1
GROUP BY team
) b ON a.score = b.score AND a.team = b.team

尽管加入本身非常昂贵,但这样您只需运行两个实际查询,而不管您的表中有多少行。所以在大表中,这种方法仍然可以比使用子查询的第一种方法快数百甚至数千倍。

关于mysql - 没有连接的 SQL 过滤行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37723013/

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