SQL排序,以便仅在另一列值相等的情况下对行进行排序

时间:2015-02-26 16:59:32

标签: mysql sql

我有一个SQL查询问题。所以这是一个表,它是一个大型查询的结果。

+---------+-------------+------------+ | page_id | TotalDegree | matchCount | +---------+-------------+------------+ | 116 | 7.0000 | 4 | | 142 | 3.0000 | 4 | | 109 | 4.0000 | 2 | | 119 | 4.0000 | 2 | | 108 | 2.0000 | 2 | | 132 | 4.0000 | 1 | | 133 | 9.0000 | 1 | | 146 | 9.0000 | 1 | | 114 | 4.0000 | 1 | | 125 | 9.0000 | 1 | | 113 | 1.0000 | 1 | | 127 | 9.0000 | 1 | | 120 | 4.0000 | 1 | | 129 | 9.0000 | 1 | | 121 | 9.0000 | 1 | +---------+-------------+------------+ 15 rows in set (0.00 sec)

现在我想根据TotalDegree' TotalDegree'来对表格进行排序。按升序排列,以便在内部进行排序,其中匹配数量为'匹配数量。列值相同。 示例:前两行有' matchCount'值4因此,应根据“TotalDegree”' TotalDegree'在这两行之间进行排序。按升序排列。 同样,所有行都包含' matchCount'等于1应该在它们之间进行排序。 因此,排序表应如下所示。

+---------+-------------+------------+ | page_id | TotalDegree | matchCount | +---------+-------------+------------+ | 142 | 3.0000 | 4 | | 116 | 7.0000 | 4 | | 108 | 2.0000 | 2 | | 109 | 4.0000 | 2 | | 119 | 4.0000 | 2 | | 113 | 1.0000 | 1 | | 132 | 4.0000 | 1 | | 114 | 4.0000 | 1 | | 120 | 4.0000 | 1 | | 133 | 9.0000 | 1 | | 146 | 9.0000 | 1 | | 125 | 9.0000 | 1 | | 127 | 9.0000 | 1 | | 129 | 9.0000 | 1 | | 121 | 9.0000 | 1 | +---------+-------------+------------+
如何设计这样的查询?提前谢谢。

2 个答案:

答案 0 :(得分:1)

您希望首先按降序排序MatchCount,按 然后在TotalDegree上(按升序排列)。

select * from TableName  
order by MatchCount desc, TotalDegree asc;

答案 1 :(得分:0)

查看order by子句

select * from fooTable order by foo1 desc, foo2 asc

在你的情况下:

select  page_id ,TotalDegree , matchCount  from fooFable order by matchCount  desc, TotalDegree asc