SQL - 列是否始终对应?

时间:2016-04-28 18:17:57

标签: mysql

SELECT max(date) as lastdt,name,col1  FROM `consumption` group by name

在上面的查询中,col1max(date)name的值是否来自同一行?

2 个答案:

答案 0 :(得分:1)

MySQL允许非聚合列出现在查询的SELECT子句中。但是,这些列的值是不确定的。

如果您想获得与具有最大col1值的记录对应的date值,那么您将需要进行额外的加入:

SELECT t1.*
FROM `consumption` AS t1
JOIN (SELECT max(`date`) as lastdt, name  
      FROM `consumption` 
      group by name) AS t2
ON t1.name = t2.name AND t1.`date` = t2.lastdt

答案 1 :(得分:0)

简短回答:他们可能是也可能不是。请参阅how mysql handles the group by clause

上的mysql文档
  

[MySql]可以自由选择每个组中的任何值,所以除非它们是   同样,所选择的值是不确定的,这可能不是什么   你想要的。

对于长篇答案,您需要阅读我上面链接的整个页面,这将为您提供完整的图片。

总结一下:在某些配置设置下,mysql以宽松模式解释group by子句,允许select列表中不在group by子句中的字段,也不受任何分组函数的约束(例如sum() )。在这种情况下,mysql可以自由地从给定组中为这样的字段选择任何值。