简体   繁体   English

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

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

mysql how to order by user defined order/sort mysql 如何按用户定义的顺序/排序排序

say for a table说一张桌子

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

How to order it in the following order of category ie category=1, category=0, category=2 to get the view as如何按以下类别的顺序排序,即类别=1,类别=0,类别=2,以获得视图

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

How do we write an sql for this?我们如何为此编写 sql?

Also better, if the statement can identify and sort desc based on the number of items on each category.同样更好的是,如果语句可以根据每个类别的项目数来识别和排序 desc。

You want to do this:你想这样做:

SELECT Name, Category
FROM MyTable
ORDER BY 
    Case category
        when 1 then 1
        when 0 then 2
        else 3
    end,
    Name

Update更新

In the first answer, the order is fixed by category.在第一个答案中,顺序是按类别固定的。 When ordering by the number of items in category, you want to do this:按类别中的项目数量排序时,您希望执行以下操作:

select name, Category, 
       (select count(*) from MyTable mt2 where mt2.Category = mt1.category) CatCount
from MyTable mt1
order by 3 DESC, name

If you want to sort by the number of entries in the category, you can do:如果要按类别中的条目数排序,可以执行以下操作:

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

If you know the order while writing the query you can use UNION ALL:如果您在编写查询时知道顺序,则可以使用 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