问题描述
|
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