MySQL порядок ранжирования в виде столбца - PullRequest
1 голос
/ 04 сентября 2011

У меня есть запрос MySQL, который выбирает данные из нескольких таблиц, а затем упорядочивает результаты на основе некоторых произвольных критериев, как показано ниже:

SELECT [columns] FROM (
  SELECT *, COUNT(*) as `matches`
    FROM [table1]
    JOIN [table2] USING (id)
    JOIN [table3] USING (id)
  WHERE [criteria]
  GROUP BY `id`
  ORDER BY `matches` DESC
) AS `grouped`
ORDER BY (
  (CASE WHEN [1st rank criteria] THEN 3 ELSE 0 END) +
  (CASE WHEN [2nd rank criteria] THEN 2 ELSE 0 END) +
  (CASE WHEN [3rd tank criteria] THEN 1 ELSE 0 END)
) DESC
LIMIT 100

Это отлично работает, но мой вопрос: могу ли ярейтинг отображается в столбце ?Я смотрел на попытки использовать переменные, но я совершенно новичок в SQL, так что все это немного за мной.

Извините, если это очевидный вопрос, но большое спасибо заранее за ваше время ипомощь.

Ответы [ 2 ]

5 голосов
/ 04 сентября 2011

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

SELECT [columns],
   (
     (CASE WHEN [1st rank criteria] THEN 3 ELSE 0 END) +
     (CASE WHEN [2nd rank criteria] THEN 2 ELSE 0 END) +
     (CASE WHEN [3rd tank criteria] THEN 1 ELSE 0 END)
   ) AS MyRank

FROM (
    SELECT *, COUNT(*) as `matches`
    FROM [table1]
    JOIN [table2] USING (id)
    JOIN [table3] USING (id)
    WHERE [criteria]
    GROUP BY `id`
    ORDER BY `matches` DESC
) AS `grouped`
ORDER BY MyRank DESC
LIMIT 100;
2 голосов
/ 04 сентября 2011

положить его в избранное

((CASE WHEN [1st rank criteria] THEN 3 ELSE 0 END) +
 (CASE WHEN [2nd rank criteria] THEN 2 ELSE 0 END) +
 (CASE WHEN [3rd tank criteria] THEN 1 ELSE 0 END)) as ranking
...