MySQL:排序没有分割集的有序行集

时间:2015-01-29 14:17:21

标签: mysql sorting sql-order-by

我有一个包含 entry_id edit_date 列的表格。我应该使用哪些查询来按 edit_date entry_id 分组的行进行排序?不按SQL术语分组。

现在我会尝试清理我想要的东西:

我有什么

entry_id    number
Entry 1 19
Entry 1 10
Entry 1 80
Entry 2 60
Entry 3 83
Entry 4 73
Entry 5 15
Entry 2 26
Entry 2 9
Entry 2 5
Entry 3 95
Entry 2 57
Entry 3 4
Entry 4 88
Entry 2 39
Entry 3 78
Entry 3 4

我需要什么:

entry_id    number
Entry 3 95  <- biggest in set
Entry 3 83  
Entry 3 78  
Entry 3 4   
Entry 3 4   
Entry 4 88  <- biggest in set
Entry 4 73  
Entry 1 80  <- biggest in set
Entry 1 19  
Entry 1 10  
Entry 2 60  <- biggest in set
Entry 2 57  
Entry 2 39  
Entry 2 26  
Entry 2 9   
Entry 2 5   
Entry 5 15

谢谢!

2 个答案:

答案 0 :(得分:1)

获得结果的一种方法是在集合中包含派生的&#34;最大的&#34;列。

如果你有这样的结果集:

_id number biggest
3   95     95
3   83     95
3   78     95
3   4      95
3   4      95
4   88     88
4   73     88 
1   80     80
1   19     80
1   10     80
2   60     60
2   57     60
2   39     60
2   26     60

然后你可以ORDER BY biggest DESC, _id DESC, number DESC

获得&#34;最大奖的一种方式&#34;将使用具有MAX(number)聚合函数和GROUP BY _id的查询,并将该查询用作内联视图,并执行连接操作。例如:

SELECT t._id
     , t.number
  FROM mytable t
  JOIN ( 
         SELECT m._id
              , MAX(m.number) AS biggest
           FROM mytable m
          GROUP BY m._id
       ) b
    ON b._id = t._id
 ORDER BY b.biggest DESC, t._id DESC, t.number DESC

内联视图查询 b 会返回&#34;最大的&#34;每个_id的编号。

答案 1 :(得分:-1)

ORDER BY entry_id, number DESC将按降序排序number,按entry_id分组。 entry_id也将被排序。

SqlFiddle