#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 это работает для вопроса, как вы его опубликовали. Если у вас есть новое требование, вы можете опубликовать новый вопрос.