表格就像:
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
似乎错了,但是可以运行...
我的问题:
选择列不在汇总函数中,例如求和,计数
按ID desc分组是什么?
最佳答案
查询有点笨。
它选择ip ='MAX'的所有记录(是的,字符串文字应使用单引号)。
它将每个ID的结果分组,因为这是主键,所以不会做任何更改。
由于没有ORDER BY
子句,它将结果限制为300个任意行。 (在较早的版本中,确保GROUP BY
也可以在MySQL中排序,这就是为什么DESC
允许GROUP BY
关键字的原因,否则这将毫无意义。因此,这可能一次有效,并且现在应该如此阅读GROUP BY id ORDER BY id DESC LIMIT 300
代替。)
它显示了未聚合的ts
,avg_time
,但是,正如前面提到的,此查询中始终没有发生聚合。
也许这只是一个错字,而GROUP BY id
实际上是ORDER BY id
,这将使查询完全有效(但是,除了在MySQL中有效的非标准引号之外)。
关于mysql - MySQL按desc分组-如何解释此sql:SELECT ts,avg_time FROM xx WHERE ip =“MAX” GROUP ID ID DESC LIMIT 300?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44040085/