mysql如何根据用户定义的顺序/字段上的项目数排序

问题描述

| MysqL如何按用户定义的顺序/顺序排序 说一桌
---------+----------
name     | category
---------+----------
apple    | 0
orange   | 0
book     | 1
notebook | 1
textboo  | 1
phone    | 2
如何按以下类别顺序进行排序,即类别= 1,类别= 0,类别= 2 得到的看法
---------+----------
name     | category
---------+----------
book     | 1
notebook | 1
textbook | 1
apple    | 0
orange   | 0
phone    | 2
我们如何为此编写一个sql? 如果该语句可以根据每个类别上的项目数来标识和排序desc,也更好。     

解决方法

        您想这样做:
SELECT Name,Category
FROM MyTable
ORDER BY 
    Case category
        when 1 then 1
        when 0 then 2
        else 3
    end,Name
更新资料 在第一个答案中,顺序是按类别固定的。在按类别中的项目数进行订购时,您要执行以下操作:
select name,Category,(select count(*) from MyTable mt2 where mt2.Category = mt1.category) CatCount
from MyTable mt1
order by 3 DESC,name
    ,        如果要按类别中的条目数进行排序,可以执行以下操作:
SELECT my_table.name,my_table.category,cats.total FROM
    (SELECT category,COUNT(*) AS total FROM my_table GROUP BY category) cats
    INNER JOIN my_table ON my_table.category = cats.category
    ORDER BY cats.total DESC,my_table.name ASC
    ,        如果在编写查询时知道顺序,则可以使用UNION ALL:
SELECT name,category
FROM table
WHERE category = 1

UNION ALL

SELECT name,category
FROM table
WHERE category = 0

UNION ALL

SELECT name,category
FROM table
WHERE category = 2