为什么MySQL允许没有聚合函数的“GROUPBY”查询?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

这是MySQL中一个非常有效的查询:

select X, Y from someTable group by X

如果在Oracle或SQLServer中尝试此查询,则会得到以下自然错误消息:

Column 'Y' is invalid in the select list because it is not contained in 
either an aggregate function or the GROUP BY clause.

那么MySQL如何确定每个X要显示哪个Y呢?它只选了一个。据我所知,它只是选择了它找到的第一个Y。理由是,如果Y既不是聚合函数,也不是GROUP BY子句,那么在查询中指定“SELECT Y”是没有意义的。因此,我作为数据库引擎将返回我想要的任何东西,

我的问题是:MySQL是这样设计的吗?他们使用ANSI-SQL的理由是什么?

提问于
用户回答回答于

我认为这是为了处理这样一种情况,即按一个字段分组将意味着其他字段也正在分组:

SELECT user.id, user.name, COUNT(post.*) AS posts 
FROM user 
  LEFT OUTER JOIN post ON post.owner_id=user.id 
GROUP BY user.id

在这种情况下,user.name在user.id中总是唯一的,所以在GROUP BY从句(尽管如你所说,问题的范围是明确的)

用户回答回答于

扫码关注云+社区