gpt4 book ai didi

php - ORDER BY MAX (`field_name` ) 使用 GROUP BY

转载 作者:行者123 更新时间:2023-11-28 23:21:23 25 4
gpt4 key购买 nike

我目前在一个足球网站上工作,我正在开发一项功能,可以回顾历史,看看哪些球员每年进球最多。

我有一个可行的解决方案,但我认为会有更简单有效的方法来解决这个问题。

这是一些示例数据:

-----------------------
year | name | goals
-----------------------
1 | player1 | 6
1 | player2 | 8
1 | player3 | 4
2 | player1 | 3
2 | player2 | 5
2 | player3 | 2
3 | player1 | 7
3 | player2 | 7
3 | player3 | 3

使用以下查询,我能够检索到我需要的部分数据。

SELECT year, MAX(goals) AS goals FROM table GROUP BY `year

------------
year | goals
------------
1 | 8
2 | 5
3 | 7

事实证明,从 name 列中检索正确的值更加困难,因为在第 3 年等情况下,我必须使用 GROUP_CONCAT,其中超过一个name等于goals的最大值。

目前,我正在使用两个查询来获得我想要的结果。我仍在使用上面的查询,但随后使用 PHP while 循环逐年搜索。

这是我的代码:

$load_goals = $db->query("SELECT `year`, MAX(`goals`) AS `goals` FROM `table` GROUP BY `year` DESC);

while($goals = $load_goals->fetchObject())
{
$players = $db->prepare("SELECT `year`, GROUP_CONCAT(`name` ORDER BY `name`) AS `name`, `goals` FROM `table` WHERE `year` = :year AND `goals` = :goals");
}

我曾尝试将这两个查询合并为一个,但无济于事,因此非常感谢此处的任何指导。

澄清一下,这应该是我的最终结果。请注意第 3 年发生的情况,其中 GROUP_CONCAT 已被提供。

------------------------------
year | name | goals
------------------------------
1 | player2 | 8
2 | player2 | 5
3 | player1,player2 | 7

最佳答案

因此,您需要所有进球数最多的球员。一种方法使用变量。另一个需要子查询。下面使用相关子查询,但是有几种写法:

SELECT year, goals, GROUP_CONCAT(name ORDER BY name) as names
FROM table t
WHERE t.goals = (SELECT MAX(t2.goals) AS goals
FROM table t2
WHERE t2.year = t.year
)
GROUP BY year, goals;

关于php - ORDER BY MAX (`field_name` ) 使用 GROUP BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41435315/

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