通过匹配变量的多个列进行排序

时间:2011-08-03 22:38:59

标签: mysql sql-order-by multiple-columns

我目前有这个mysql语句:

SELECT * FROM tablename
 WHERE column1 = 'yes'
 ORDER BY
       CASE column2 WHEN 'premium' THEN 1
                    WHEN 'basic' THEN 2
                    ELSE 999
       END,
       customer_id ASC

我想在混音中添加另一栏....所以这就是我最终想做的事。

ORDER BY:
column2 = premium
THEN
column2 = basic
THEN
column3 = specialcustomer
THEN
display remaining results according to customer_id ASC

所以输出,按照我希望它出现的顺序。

John Doe - 溢价, 莎莉·琼斯 - 溢价, 吉姆史密斯 - 基本 - 特别客户, 唐约翰逊 - 基本 - 非特定客户, Mary Lee - basic - notspecialcustomer

1 个答案:

答案 0 :(得分:1)

SELECT * FROM tablename
 WHERE column1 = 'yes'
 ORDER BY
       CASE column2 WHEN 'premium' THEN 1
                    WHEN 'basic' THEN 2
                    ELSE 999
       END,
       IF(column3 = 'specialcustomer', 1, 2),
       customer_id ASC

column3 = 'specialcustomer'是特殊客户应该返回true的支票。

order by部分的内容是: 你可以想象这3个额外的虚拟列,从这些表达式中获取它们各自的值: 1)case ... 2)if ... 3)customer_id

然后按行顺序对这些列的值进行排序。