两个ORDER BY子句和一个LIMIT

时间:2013-04-01 17:33:56

标签: mysql sql sql-order-by

这是一些排序:我有一个包含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

但两者都没有给出理想的结果。

2 个答案:

答案 0 :(得分:7)

您可以使用子查询:

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

编辑:进一步说明

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

答案 1 :(得分:3)

SELECT id, name, rating
FROM
    (SELECT id, name, rating FROM items ORDER BY ratings LIMIT 10) t
ORDER BY name

这将按rating排在前10位,然后按name排序。

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