我想知道为什么当我更改偏移量时,这个查询在不同版本的 MySQL 中显示不同的结果。这是我的询问
SELECT
DISTINCT(
users.partner_id
),
users_summaries.total_count,
users.last_working_date
FROM
`users`
LEFT OUTER JOIN (
SELECT
user_loc_summaries.partner_id,
user_loc_summaries.loc_id,
SUM(
user_loc_summaries.total_count
) AS total_count
FROM
user_loc_summaries
WHERE
(
user_loc_summaries.loc_id = '2222'
)
GROUP BY
user_loc_summaries.partner_id
) AS users_summaries ON (
users_summaries.partner_id = users.partner_id
)
WHERE
AND `users`.`loc_id` IN (2222, 666, 666)
GROUP BY
users.partner_id
ORDER BY
(
users.loc_id = '2222'
) DESC,
users.loc_id ASC,
users.last_working_date desc
LIMIT
10 OFFSET 0
我知道使用group_by而不使用order_by可能会导致这个问题。但不知道为什么mysql 5.7版本返回正确的结果?
在 MySQL 中,历史上 GROUP BY 也用于提供排序。如果查询指定了 GROUP BY,则结果将按照查询中存在 ORDER BY 进行排序。
https://dev.mysql.com/blog-archive/removal-of-implicit-and-explicit-sorting-for-group-by/
在 mysql 5.7 列 gourp_by 也进行排序(默认 asc),从 mysql 8.0.13 开始它被删除了,所以为什么使用 limit、offset with group_by 而没有 order_by(group_by 列)返回正确的结果。