Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 两个按顺序排列的子句和一个限制_Mysql_Sql_Sql Order By - Fatal编程技术网

Mysql 两个按顺序排列的子句和一个限制

Mysql 两个按顺序排列的子句和一个限制,mysql,sql,sql-order-by,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 * FROM (

这是一些排序:我有一个带有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 *
FROM (
   SELECT id, names
   FROM items 
   ORDER BY ratings DESC
   LIMIT 10
   ) t
ORDER BY names
编辑:进一步解释


最初的查询按评级DESC排序,然后按名称排序——它只会对具有相同评级的名称进行排序。因此,如果两个项目具有相同的评级,那么您将按名称对这两个项目进行排序。它将首先按评级对所有记录进行排序,然后再按名称排序(在相同的评级范围内)

您可以使用子查询:

SELECT *
FROM (
   SELECT id, names
   FROM items 
   ORDER BY ratings DESC
   LIMIT 10
   ) t
ORDER BY names
编辑:进一步解释

最初的查询按评级DESC排序,然后按名称排序——它只会对具有相同评级的名称进行排序。因此,如果两个项目具有相同的评级,那么您将按名称对这两个项目进行排序。它将首先按评级对所有记录进行排序,然后再按名称排序(在相同的评级范围内)

这将按
评级
排名前10名,然后按
名称
排序

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

这将按
评级
排名前10名,然后按
名称
排序


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

但是为什么原始查询不起作用,我等待着在答案中找到一些原因:)@Akam--原始查询按评级DESC排序,然后按名称排序--它只会对具有相同评级的名称进行排序。因此,如果两个项目具有相同的评级,那么您将按名称对这两个项目进行排序。它将首先按评级对所有记录进行排序,然后再按名称进行排序。如果你需要任何进一步的澄清,请告诉我。无论如何,我没有被问到这个问题,我只是想让你回答explain@Akam--不用担心,添加到帖子中很好,也很高兴它起到了作用。但是为什么原始查询不起作用,我等着看答案中有什么原因:)@Akam--原始查询按评级DESC排序,然后按名字——它只会对评级相同的名字进行排序。因此,如果两个项目具有相同的评级,那么您将按名称对这两个项目进行排序。它将首先按评级对所有记录进行排序,然后再按名称进行排序。如果你需要任何进一步的澄清,请告诉我。无论如何,我没有被问到这个问题,我只是想让你回答explain@Akam--不用担心,加入这个职位很好,很高兴它有所帮助。
SELECT id, name, rating
FROM
    (SELECT id, name, rating FROM items ORDER BY ratings LIMIT 10) t
ORDER BY name