使用 group_by 和偏移限制时的结果差异(MySQL 5.7 与 MySQL 8.0)

问题描述 投票:0回答:1

我想知道为什么当我更改偏移量时,这个查询在不同版本的 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
  • last_working_date 可以为空(在我的数据库中,last_working_date 几乎为空)
  • 在版本 5.7 上,当我更改偏移量(用于分页)时,结果始终是 uniq
  • 在版本 8 上,当我更改偏移量时,结果与之前的页面重叠

我知道使用group_by而不使用order_by可能会导致这个问题。但不知道为什么mysql 5.7版本返回正确的结果?

mysql mysql-5.7 mysql-8.0
1个回答
0
投票

在 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 列)返回正确的结果。

© www.soinside.com 2019 - 2024. All rights reserved.