1

这是一些排序:我有一个包含 id、名称和评级的表。我想根据评分列出 10 个最佳项目,这很好:

SELECT id FROM items ORDER BY ratings DESC LIMIT 10

但现在困难的部分来了:我想根据评分列出 10 个最佳项目,但按字母顺序排列。我试过

SELECT id FROM items ORDER BY ratings DESC, names ASC LIMIT 10

SELECT id FROM items ORDER BY names ASC, ratings DESC  LIMIT 10

但两者都没有给出预期的结果。

4

2 回答 2

9

您可以使用子查询:

SELECT *
FROM (
   SELECT id, names
   FROM items 
   ORDER BY ratings DESC
   LIMIT 10
   ) t
ORDER BY names

编辑:进一步解释

您的原始查询按评级 DESC 排序,然后按名称排序 - 它只会对具有相同评级的名称进行排序。因此,如果两个项目具有相同的评级,那么你会得到这 2 个按名称排序。它将首先按评级对所有记录进行排序,然后按名称(在相同评级内)。

于 2013-04-01T17:35:48.297 回答
3
SELECT id, name, rating
FROM
    (SELECT id, name, rating FROM items ORDER BY ratings LIMIT 10) t
ORDER BY name

这将按 排序前 10 名rating,然后按 排序name

您的查询不正确,因为:它们按名称对行进行排序,然后按评级(或相反的顺序),在执行排序后取 top10。您需要进行第一次排序,取前 10 个,然后使用第二列值对这 10 个结果进行排序。

于 2013-04-01T17:36:04.227 回答