该语句就像SELECT * FROM db.table group by id desc;
会引发类似错误
15:02:24 SELECT * FROM db.table按ID分组 desc LIMIT 0、10错误代码:1064。您的SQL错误 句法;检查与您的MySQL服务器版本相对应的手册 在第1行0.00014处使用在'desc LIMIT 0,10'附近的正确语法 秒
在Ubuntu 18.04 Desktop 64bit上的MySQL 8.0.13上
在Windows或CentOS或Ubuntu上的MySQL 5.7上会很好。
我基本上知道,select语句就像。
SELECT statement... [WHERE condition | GROUP BY `field_name(s)` HAVING condition] ORDER BY `field_name(s)` [ASC | DESC];
那么这5.7的问题不会发出错误吗?
还是SQL标准上更复杂的东西?
答案 0 :(得分:1)
根据@ P.Salmon对问题的评论。
如果您在手册中查找select语句 http://dev.mysql.com/doc/refman/5.7/en/select.html您将看到 最多5.7
asc|desc
是group by
的可选修饰符 从8.0开始不再存在的语句,如果您查看 升级文件 https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-sql-changes 弃用记录在案。
由于这种情况,@ Linda Li的答案可能是一个不错的选择。
答案 1 :(得分:0)
此查询没有任何意义:
SELECT *
FROM db.table
GROUP BY id DESC;
您正在执行聚合查询。因此(大概),该表每个id
有多行。那些被浓缩成一排。其他列应使用什么值?遗憾的是MySQL曾经支持这种语法。因此,值得欢迎的更改是ONLY_FULL_GROUP_BY
现在是默认设置。
一个小提示是,使用没有聚合功能的聚合查询是可疑的。
也许你想要
select id, min(col1), min(col2), . . .
from t
group by id;
或更可能的是,您想要特定的行,例如“最早”或“最新”,例如:
select t.*
from t
where t.createdAt = (select min(t2.createdAt) from t t2 where t2.id = t.id);
答案 2 :(得分:0)
我遇到了同样的问题,因此对于MySQL 8,我使用了类似的sql:
SELECT * FROM db.table
group by id
order by id desc