"group by desc" 在 mysql 8.0 上的语法错误在 5.7 上没问题
"group by desc" syntax error on mysql 8.0 which is fine on 5.7
语句就像SELECT * FROM db.table group by id desc;
会引发类似
的错误
15:02:24 SELECT * FROM db.table group by id
desc LIMIT 0, 10 Error Code: 1064. You have an error in your SQL
syntax; check the manual that corresponds to your MySQL server version
for the right syntax to use near 'desc LIMIT 0, 10' at line 1 0.00014
sec
MySQL8.0.13 在Ubuntu18.04 桌面 64 位
在 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 标准上更复杂的东西?
这个查询没有意义:
SELECT *
FROM db.table
GROUP BY id DESC;
您正在进行聚合查询。所以(大概),table 每个 id
有多行。这些被浓缩成一行。其他列应该使用什么值?遗憾的是 MySQL 曾经支持这种语法。所以一个受欢迎的变化是 ONLY_FULL_GROUP_BY
现在是默认值。
一个小提示是,使用没有聚合函数的聚合查询是可疑的。
也许你想要:
select id, min(col1), min(col2), . . .
from t
group by id;
或者更可能的是,您需要特定的行,例如 "earliest" 或 "most recent",例如:
select t.*
from t
where t.createdAt = (select min(t2.createdAt) from t t2 where t2.id = t.id);
我有同样的问题,所以对于 MySQL 8,我使用了 sql 这样的:
SELECT * FROM db.table
group by id
order by id desc
取自@P.Salmon对问题的评论。
If you look up the select statement in the manual
http://dev.mysql.com/doc/refman/5.7/en/select.html you will see
that up to 5.7 asc|desc
are optional modifiers to the group by
statement which are no longer present from 8.0.and if you look at the
upgrade documentation
https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-sql-changes
This deprecation is documented.
既然这样,@Linda Li 的回答不失为一个不错的选择。
语句就像SELECT * FROM db.table group by id desc;
会引发类似
的错误15:02:24 SELECT * FROM db.table group by id desc LIMIT 0, 10 Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'desc LIMIT 0, 10' at line 1 0.00014 sec
MySQL8.0.13 在Ubuntu18.04 桌面 64 位
在 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 标准上更复杂的东西?
这个查询没有意义:
SELECT *
FROM db.table
GROUP BY id DESC;
您正在进行聚合查询。所以(大概),table 每个 id
有多行。这些被浓缩成一行。其他列应该使用什么值?遗憾的是 MySQL 曾经支持这种语法。所以一个受欢迎的变化是 ONLY_FULL_GROUP_BY
现在是默认值。
一个小提示是,使用没有聚合函数的聚合查询是可疑的。
也许你想要:
select id, min(col1), min(col2), . . .
from t
group by id;
或者更可能的是,您需要特定的行,例如 "earliest" 或 "most recent",例如:
select t.*
from t
where t.createdAt = (select min(t2.createdAt) from t t2 where t2.id = t.id);
我有同样的问题,所以对于 MySQL 8,我使用了 sql 这样的:
SELECT * FROM db.table
group by id
order by id desc
取自@P.Salmon对问题的评论。
If you look up the select statement in the manual http://dev.mysql.com/doc/refman/5.7/en/select.html you will see that up to 5.7
asc|desc
are optional modifiers to thegroup by
statement which are no longer present from 8.0.and if you look at the upgrade documentation https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-sql-changes This deprecation is documented.
既然这样,@Linda Li 的回答不失为一个不错的选择。