GROUP BY在SQL中选择哪条记录

时间:2014-05-27 11:20:37

标签: mysql sql group-by choice

如果我有这样的SQL查询:

SELECT playerno,town
FROM players
GROUP BY town

在这种情况下,服务器将返回允许说一个城镇,而对于playerno,它将返回一个值,即使数据库中有多个值。

我的问题是,将选择哪个值?是随机做出的选择,还是取得第一个结果,还是会发生其他事情? 谢谢。

2 个答案:

答案 0 :(得分:0)

如果你不告诉发动机做什么,它会自行决定。它取决于引擎一些将采取第一个,其他将采取最后一个,有些给出错误。您可以使用以下功能之一来控制它:

  1. 第一(字段名)
  2. 最后(字段名)
  3. 分钟(字段名)
  4. MAX(字段名
  5. 甚至采取大幅度或总和:使用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不会影响服务器的每个组中的哪些值   选择。

因此,您的问题的答案是不确定。值来自不确定的行,您不应该依赖来自任何特定行的值。