繁体   English   中英

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

[英]mysql how to order by user defined order/sort by number of items on a field

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM