对mysql结果进行排序。按列1排序,按列2分组
我有一个包含两列“id”和“name”的表。id是常规的自动增量索引,名称只是varchar对mysql结果进行排序。按列1排序,按列2分组,mysql,sql-order-by,Mysql,Sql Order By,我有一个包含两列“id”和“name”的表。id是常规的自动增量索引,名称只是varchar id name 1 john 2 mary 3 pop 4 mary 5 john 6 michael 7 john 8 will 我想像这样对搜索结果排序 8 will 7 john 5 john 1 john 6 michael 4 mary 2 mary 3 pop Id是DESC,但所有重复的名称都分组在一起。如果ASC更容易实现,那也没关系。如有必要,我可
id name
1 john
2 mary
3 pop
4 mary
5 john
6 michael
7 john
8 will
我想像这样对搜索结果排序
8 will
7 john
5 john
1 john
6 michael
4 mary
2 mary
3 pop
Id是DESC,但所有重复的名称都分组在一起。如果ASC更容易实现,那也没关系。如有必要,我可以在PHP中反转结果
按名称的常规顺序,id DESC首先对所有名称进行排序,然后对id进行排序。那不是我想要的。我对名字的字母顺序不感兴趣
我希望id按描述顺序排列,如果有重复的名称,则按重复的名称分组
p、 很抱歉,这是一个重复的问题。如果我理解正确,您将需要一个临时表
SELECT TableName.id, TableName.Name FROM TableName
INNER JOIN
(
SELECT Name, max(id) as maxid FROM TableName GROUP BY Name
) as tmp on tmp.Name = TableName.Name
ORDER BY maxid DESC, id DESC
在mysql中有一个GROUPBY子句,请参阅,并在页面上搜索GROUPBY 页面上有一些例子 所以试试这个
SELECT id, name FROM TableName
group BY name;
由于您的ID充当主键,您可能不需要告诉它按升序排序,但您可以添加
order by id
如果你愿意
当然,GROUPBY子句还允许添加ASC和DESC子句,因此如果需要,应该按字母顺序获取它们
不过,也就是说,只需使用
order by desc(name)
可能会得到类似的结果,您需要在数据集上进行测试
请注意,这可能是一个非常昂贵的选择,因为它试图将所有内容整理成您所需的顺序。
因此,如果您希望将其用作其他选择的基础,则可以决定创建一个临时表,然后直接进行选择,否则每次使用主表时,分组可能会重新发生。
不过,一旦您的数据集变得相当大,这可能是您想要研究的事情。
结果id中的David不存在DESCIn SQL
ORDER BY
将通过逐个比较对结果行进行排序。由于所需结果中5 john
的位置取决于7 john
的位置,因此这将不起作用。我担心没有一个关系结构能够满足您的需求。@Alma Do Mundo:您是对的。身份证不是按DECS顺序排列的。但是有一个全局DECS顺序(8,7,6,4,3)和一组本地DECS顺序(7,5,1)(4,2),我在内部联接和ORDERBY之间放置WHERE子句。有效:)谢谢。