如果我有这样的SQL查询:
SELECT playerno,town
FROM players
GROUP BY town
在这种情况下,服务器将返回允许说一个城镇,而对于playerno,它将返回一个值,即使数据库中有多个值。
我的问题是,将选择哪个值?是随机做出的选择,还是取得第一个结果,还是会发生其他事情? 谢谢。
答案 0 :(得分:0)
如果你不告诉发动机做什么,它会自行决定。它取决于引擎一些将采取第一个,其他将采取最后一个,有些给出错误。您可以使用以下功能之一来控制它:
甚至采取大幅度或总和:使用su
答案 1 :(得分:0)
MySQL文档非常清楚"Group By Extentions"部分中发生的事情。
例如,此查询在标准SQL中是非法的,因为名称 选择列表中的列不会出现在GROUP BY:
中SELECT o.custid, c.name, MAX(o.payment) FROM orders AS o, customers AS c WHERE o.custid = c.custid GROUP BY o.custid;
要使查询合法,必须从中省略name列 选择列表或在GROUP BY子句中命名。
MySQL扩展了GROUP BY的使用,因此选择列表可以不引用非聚合列 在GROUP BY子句中命名。这意味着前面的查询是 在MySQL合法。您可以使用此功能来获得更好的性能 避免不必要的列排序和分组。但是,这是 主要在每个非聚合列中的所有值都没有时有用 在GROUP BY中命名的每个组都是相同的。服务器是免费的 从每个组中选择任何值,所以除非它们相同,否则 选择的值是不确定。此外,选择价值观 通过添加ORDER BY子句不会影响每个组。 选择值后,会对结果集进行排序 ORDER BY不会影响服务器的每个组中的哪些值 选择。
因此,您的问题的答案是不确定。值来自不确定的行,您不应该依赖来自任何特定行的值。