首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql如何按用户定义的顺序排序/按字段上的项数排序

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

Stack Overflow用户
提问于 2011-06-14 22:44:51
回答 3查看 7.3K关注 0票数 2

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

比如说一张桌子

代码语言:javascript
复制
---------+----------
name     | category
---------+----------
apple    | 0
orange   | 0
book     | 1
notebook | 1
textboo  | 1
phone    | 2

如何按以下类别排序,即category=1、category=0、category=2,以获得视图

代码语言:javascript
复制
---------+----------
name     | category
---------+----------
book     | 1
notebook | 1
textbook | 1
apple    | 0
orange   | 0
phone    | 2

我们如何为此编写一个sql?

如果语句可以根据每个类别上的项数来识别和排序desc,这也会更好。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-14 22:48:43

您想要这样做:

代码语言:javascript
复制
SELECT Name, Category
FROM MyTable
ORDER BY 
    Case category
        when 1 then 1
        when 0 then 2
        else 3
    end,
    Name

更新

在第一个答案中,顺序是按类别固定的。当按类别中的项目数排序时,您需要执行以下操作:

代码语言:javascript
复制
select name, Category, 
       (select count(*) from MyTable mt2 where mt2.Category = mt1.category) CatCount
from MyTable mt1
order by 3 DESC, name
票数 8
EN

Stack Overflow用户

发布于 2011-06-14 22:57:33

如果要按类别中的条目数进行排序,可以执行以下操作:

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2011-06-14 22:48:06

如果您在编写查询时知道顺序,则可以使用UNION ALL:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6345377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档