Mysql 两个按顺序排列的子句和一个限制
这是一些排序:我有一个带有ID、名称和评级的表。我想根据评分列出10个最好的项目,这很好: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 (
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