У меня есть несколько сложный вопрос, связанный с MySQL. Это таблица, которую я имею:
keyword args title namespace_id ratio
en 1 A 23 0.5
en 1 B 89 0.6
en 0 C 89 0.4
foo 1 Foo 23 0.7
bar 1 Bar 89 0.3
Я хочу получить список всех строк без дубликатов (ключевые слова, аргументы). Если есть дубликаты, выбранная строка должна быть выбрана в порядке, указанном мною namespace_ids. Оставшиеся строки должны быть упорядочены по соотношению.
Пример результата с namespace_id порядка 23,89, x, y:
keyword args title namespace_id ratio
foo 1 Foo 23 0.7
en 1 A 23 0.5
en 0 C 89 0.4
bar 1 Bar 89 0.3
Пример результата с порядком пространства имен 89,23, x, y:
keyword args title namespace_id ratio
foo 1 Foo 23 0.7
en 1 B 89 0.6
en 0 C 89 0.4
bar 1 Bar 89 0.3
Есть ли какой-нибудь способ, которым я могу это сделать прямо в MySQL? Я взглянул на GROUP BY, ORDER BY и заметил даже функцию GROUP_CONCAT (), но мне не удалось собрать все вместе должным образом. Утверждение, которое так или иначе мне нужно:
SELECT keyword, args, title, namespace_id, ratio
FROM tbl
GROUP BY keyword, args
ORDER BY ratio DESC;
Но теперь я не знаю, как внести порядок namespace_id.
Я нашел похожие вопросы, подобные этим:
MySQL: "упорядочить" внутри "группы по"
Ответ там близок к тому, что я хочу, однако мой порядок namespace_id варьируется и не может быть рассчитан функцией MAX ().
РЕДАКТИРОВАТЬ: Задача здесь состоит в том, чтобы сказать GROUP BY
, какую строку выбрать. Обычный ORDER BY
, по-видимому, этого не делает, он использует только вывод GROUP BY
.