我有一个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很新,所以这一切都超出了我的意义.
对不起,如果这是一个显而易见的问题,但非常感谢您的时间和帮助.
试试这个:
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)
| 归档时间: |
|
| 查看次数: |
908 次 |
| 最近记录: |