为什么在查询语句中添加groupby后结果顺序发生了变化?

gcuhipw9  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(289)

数据库:MySQL5.6 users 表格:

| id | name |
| -- | ---- |
| 1  | A    |
| 2  | B    |
``` `user_likes` 表格:

| id | user_id | star | created_at |
| -- | ------- | ---- | ------------------- |
| 1 | 1 | 2 | 2018-09-12 00:00:00 |
| 2 | 2 | 3 | 2018-09-12 00:00:00 |

查询1

select u.name, ul.user_id
from users u, user_likes ul
where u.id = ul.user_id
order by ul.star desc, ul.created_at desc;

查询2

select u.name, ul.user_id
from users u, user_likes ul
where u.id = ul.user_id
group by ul.user_id
order by ul.star desc, ul.created_at desc;

为什么添加后结果顺序发生变化 `group by ul.user_id` 在这种情况下?
所以你想从 `user_likes` ,怎么办?
6l7fqoea

6l7fqoea1#

因为您没有使用任何聚合列,并且您的字段不是 GROUP BY 或者 ORDER BY 你得到的是随机的行。
在你的第一个问题中 order by ul.star desc, ul.created_at desc 如果多行具有相同的星号和相同的属性,那么结果可以给出这些行的随机顺序。
在你的第二个问题上,你首先 group by user.id 但你没有任何聚合。对于您选择的字段,可以获得属于该组的任何行或任何随机结果。
当我说随机更像是不确定的,因为我不喜欢每次都有不同的结果。通常取决于数据的存储方式或是否使用了索引。

t1qtbnec

t1qtbnec2#

SELECT users.name , user_likes.user_id 
FROM user 
JOIN user_likes 
  ON user.id = user_likes.user_id  
 GROUP BY user.id  
order by user_likes.star desc, user_likes.created_at desc;

最佳方式结果

相关问题