【发布时间】:2017-05-18 06:24:12
【问题描述】:
表格是这样的:
CREATE TABLE `api_stats` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ip` varchar(30) DEFAULT NULL,
`app_name` varchar(50) DEFAULT NULL,
`api_name` varchar(100) DEFAULT NULL,
`avg_time` float(10,5) DEFAULT NULL,
`ok` int(10) DEFAULT NULL,
`err` int(10) DEFAULT NULL,
`ts` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6741231 DEFAULT CHARSET=latin1
这个奇怪的 sql 是:
SELECT ts,avg_time FROM api_stats WHERE ip="MAX" GROUP BY id DESC LIMIT 300
似乎错了,但它运行... 我的问题:
- 选择列不在 sum、count 等聚合函数中
- 按 id desc 分组是什么?
【问题讨论】:
-
为什么错了?
-
谁告诉你错了?
-
用适当的数据样本更新您的问题..请预期结果
-
数据很多但并不重要。我的意思是,在我看来,它应该因语法错误而无法运行。但我错了。 auto_increment 列在 group by 中是特殊的吗?
-
阅读 only_full_group_by dev.mysql.com/doc/refman/5.7/en/sql-mode.html,从 mysql 5.7.5 开始,默认情况下这是真的,但在此之前 mysql 允许松散的 group by。