Получите случайную строку для каждой ГРУППЫ ГРУППЫ ПО

#mysql

Вопрос:

У меня есть следующий запрос

 SELECT *
 FROM table1 
 JOIN table2 
    ON table1.appId = table2.appId 
 WHERE table1.appId IS NOT NULL 
 ORDER 
    BY table2.count DESC
     , table1.appId
     , RAND()
 

что производит:

ID Приложение считать
4 2 5
2 1 4
1 1 4
3 1 4
8 5 2
6 5 2
7 5 2
5 5 2

Мне нужна только одна случайная строка для каждого приложения, но я не могу решить ее простым GROUP BY appId способом, учитывая, что она всегда возвращает один и тот же результат.

Мои результаты должны выглядеть так:

ID Приложение считать
4 2 5
3 1 4
7 5 2

Комментарии:

1.3-1-3 ?????????

Ответ №1:

Вы можете использовать GROUP_CONCAT() , чтобы выбрать все идентификаторы каждого приложения в случайном порядке в списке, разделенном запятыми, а затем SUBSTRING_INDEX() выбрать первый:

 SELECT SUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY RAND()), ',', 1) id,
       appId, count
FROM .........
WHERE ...........
GROUP BY appId, count
ORDER BY count DESC
 

Комментарии:

1. из вопроса следует, что они просто хотят сгруппироваться по идентификатору приложения; если это так, для получения количества выбранных идентификаторов потребуется самостоятельное объединение

2. это, похоже, не работает, если есть больше атрибутов (см. Обновленный вопрос).

3. @guidev это работает для вопроса, как вы его опубликовали. Если у вас есть новое требование, вы можете опубликовать новый вопрос.