在MySQL中按多列进行排序

3

i have a table like this :

key   value   rating

1      1       1

0      0       3

0      1       2

我想首先按评分列的降序排列表格,对于值列为1的那些行,应该按键以降序排序。因此得到的结果表格应该是这样的:

key   value   rating

0      0       3

1      1       1

0      1       2

我尝试过这个:
SELECT * FROM `table` ORDER BY CASE `value` WHEN 1 THEN `key` 
        END 
 `table`.`pair` desc

1
如果有另一条记录的value=0rating=2,应该发生什么? - default locale
@默认语言环境:实际上,我的真实表中第三列是日期时间字段。因此,第三列中的值将是唯一的。为了提出这个问题,我已经更改了列名。 - user3243180
好的,你可以将数字替换回相应的日期 :) 我的问题是:如果您有一个评级等于“特殊”值的非特殊值,哪个记录应该先进行? - default locale
2个回答

2

您没有说明在 value=1value<>1 的记录之间如何排序。因此,我猜测 value=1 的记录将排在最后:

SELECT *
FROM table
ORDER BY
    (
    CASE
        WHEN value=1 THEN -1
        ELSE rating
    END
    ) desc,
    key desc

如果您有负面评价,可以将 -1 替换为您的负面限制。目标是将 value=1 记录分开排序。
查看 这个示例。我添加了一些记录以说明问题陈述中的问题。
目前从您的问题中不清楚像 (0,1,4)(1,1,2)(0,0,3) 这样的记录应该如何排序。

当我运行这个查询时,我得到了{0,0,3}、{0,1,2}、{1,1,1}。因此,它按评分排序。但它没有按关键字按降序排序。 - user3243180
请查看更新后的问题。第一次我忘记了“key desc”,但现在应该可以工作了。 - default locale

1
尝试使用order by,使用case语句自定义排序顺序。
SELECT *
FROM   yourtable
ORDER  BY CASE
            WHEN value = 0 THEN rating
            ELSE key
          END DESC 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接