MySQL订单排名为列

Sup*_*gel 1 mysql ranking

我有一个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
Run Code Online (Sandbox Code Playgroud)

这很好,但我的问题是:我可以将排名分数显示为列吗?我看过尝试使用变量,但我对SQL很新,所以这一切都超出了我的意义.

对不起,如果这是一个显而易见的问题,但非常感谢您的时间和帮助.

p.c*_*ell 5

试试这个:

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;
Run Code Online (Sandbox Code Playgroud)