sql查询给出了奇怪的结果

时间:2012-06-21 04:52:17

标签: mysql database

为什么这个查询给出了奇怪的结果..

SELECT max(greatest(home_team_total,away_team_total)) AS max_team_score, id 
FROM `match`
WHERE id IN (1,2,3,4,5)

SELECT greatest(home_team_total,away_team_total) AS max_team_score, id 
FROM `match`
WHERE id IN (1,2,3,4,5)
ORDER BY max_team_score DESC
LIMIT 1

给出正确的结果..

最大值仅在两种情况下都是正确的,但匹配的ID在第一种情况下是错误的。

2 个答案:

答案 0 :(得分:3)

这是因为您在SELECT子句中包含id字段。你想要哪个id?我知道您可能想要与最大行关联的那个,但可能有多个,如果您还要返回min(greatest(home_team_total,away_team_total))怎么办?

第二个查询是您想要解决此问题的问题。

编辑以使其更清晰:

您的查询相当于:

SELECT max(greatest(home_team_total,away_team_total)) AS max_team_score, ANY(id)
FROM `match`
WHERE id IN (1,2,3,4,5)

查看http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html

它说:“服务器可以自由选择每个组中的任何值,因此除非它们相同,否则所选择的值是不确定的。”

答案 1 :(得分:0)

如果您确实希望第一个查询有效,则必须将其更改为以下内容:

SELECT maximum(home_team_total,away_team_total)AS max_team_score,id 来自match 最大的地方(home_team_total,away_team_total)= ( SELECT max(最大(home_team_total,away_team_total))FROM match

请注意,您可以在结果中包含多行,因此我希望此解决方案适用于“LIMIT 1”替代方案。

相关问题