MySQL订单排名为列

时间:2011-09-04 05:52:47

标签: 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

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

很抱歉,如果这是一个显而易见的问题,请多多提前感谢您的时间和帮助。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:2)

将其放入选择

((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