首页 文章

排序mysql结果 . 按col1排序,按col2分组

提问于
浏览
2

我有一个包含2列'id'和'name'的表 . id是常规自动增量索引,name只是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更容易实现 . 如有必要,我可以在PHP中反转结果 .

常规ORDER BY名称,ID DESC首先对所有名称进行排序,然后对id进行排序 . 那不是我想要的 . 我对按字母顺序排列的名字不感兴趣 .

我想要DESC顺序的id,如果有的话,按重复的名称分组 .

附:我向它道歉这是一个重复的问题 .

2 回答

  • 3

    如果我理解正确,你需要一个临时表 .

    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
    
  • 0

    在mysql中有一个group by子句,请参阅select,并在页面上搜索group by .

    页面上有一些例子

    试试这个......

    SELECT id, name FROM TableName
    group BY name;
    

    由于您的ID充当您的主键,您可能不需要告诉它按升序排序,但您可以添加

    order by id
    

    如果你愿意的话 .

    当然,group by子句也可以添加ASC和DESC子句,因此如果需要,您应该按字母顺序获取它们 .

    虽然,那说只是使用了

    order by desc(name)
    

    可能会给你一个类似的结果,你需要在你的数据集上测试它 .

    请注意,这可能是一个非常昂贵的选择,因为它会尝试将所有内容排序到您所需的顺序 . 因此,如果您希望将其用作其他选择的基础,则可以决定创建临时表,然后可以直接选择,否则每次使用主表时可能会重新进行分组 . 一旦你的数据集变得相当大,这可能是你想要做的事情 . 大卫

相关问题