Почему порядок добавления результатов изменился после добавления группы к предложению запроса? - PullRequest
0 голосов
/ 12 сентября 2018

DB: MySQL 5.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_id из user_likes, как это сделать?

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Поскольку вы не используете какой-либо столбец агрегации и ваши поля не совпадают с GROUP BY или ORDER BY, вы получаете случайные строки.

В вашем первом запросе вы order by ul.star desc, ul.created_at desc, если несколько строк имеют одинаковую звезду и один и тот же созданный_, результат может дать ваш случайный порядок для этих строк.

По второму запросу вы сначала group by user.id, но у вас нет никаких агрегатов. там для поля по вашему выбору можно получить любую строку, принадлежащую этой группе, снова любой случайный результат.

Когда я сказал, что случайность больше похожа на недетерминированность, потому что каждый раз не похож на другой результат. Обычно зависят от того, как были сохранены данные или использовался ли индекс.

0 голосов
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;

Лучший результат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...