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

标签 mysql sql select sql-order-by

mysql如何按用户定义的顺序/排序排序

说要一张 table

---------+----------
name     | category
---------+----------
apple    | 0
orange   | 0
book     | 1
notebook | 1
textboo  | 1
phone    | 2

如何按照以下类别顺序对其进行排序,即类别=1,类别=0,类别=2 获得 View 为

---------+----------
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

关于mysql如何按用户定义的顺序排序/按字段上的项目数排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6345377/

相关文章:

SQL 选择然后删除

mysql - 在 mysql < 8 中获取树文件夹结构的父项和子项并且没有 CTE

c++ - 服务器非阻塞 TCP 套接字需要时间流式传输内容

文件路径的 MySQL 搜索字段

mysql - 连接查询解释

php - 为什么使用 AND 运算符进行关键字搜索无法在 php 中获取搜索结果

mysql - 在 Liquibase 中使用现有数据?

MySQL 和用户偏好的预定更新?

php - Laravel mysql php 时间戳

c++ - 套接字 - 使用选择超时