Как выбрать уникальные строки, за которыми следует строка с наибольшим значением в MySQL? - PullRequest
1 голос
/ 21 июля 2011

У меня есть таблица базы данных MySQL, содержащая информацию о местах.Я пытаюсь получить все уникальные категории, за которыми следуют места с наивысшим рейтингом, но результаты, возвращаемые сервером, не кажутся точными.

В базе данных в одной категории может быть несколько записей, набрав 100, но MySQL выберетнапример, с баллом 95.

Вот запрос:

SELECT category, score, title
FROM places 
WHERE active = '1'
GROUP BY category
ORDER BY score DESC

возможно ли сделать это в одном запросе?

UPDATE

Я переписал свой запрос, поскольку мне было предложено использовать функцию MySQL MAX (), однако возвращенные результаты все еще не верны

вот пример нового запроса

SELECT category, MAX(score) AS maxScore, title, score AS realScore
FROM places 
WHERE active = '1'
GROUP BY category
ORDER BY score DESC

Ответы [ 3 ]

3 голосов
/ 21 июля 2011
SELECT category, MAX(score) max_score
FROM places
WHERE active = 1
GROUP BY category
ORDER BY max_score DESC, RAND()
1 голос
/ 21 июля 2011
SELECT category
     , MAX(score) AS maxScore
FROM places
WHERE active = '1'
GROUP BY category

Если вам нужны и другие поля, кроме category и (максимум) score, вы можете использовать подзапрос:

SELECT p.category
     , p.score
     , p.title
     , p.otherfield
     , ...
FROM
    places AS p
  JOIN
    ( SELECT category
           , MAX(score) AS maxScore
      FROM places
      WHERE active = '1'
      GROUP BY category
    ) AS grp
    ON  grp.category = p.category
    AND grp.maxscore = p.score
WHERE p.active = '1'
ORDER BY maxScore DESC  

Как указывал @zekms, это будетсоздать несколько строк (с одной и той же категорией), если есть несколько строк с одинаковой категорией и максимальной оценкой.

0 голосов
/ 21 июля 2011

Попробуйте это:

SELECT category, max(score)...
...