首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按[My]SQL[ite]上文本列的离散值排序

按[My]SQL[ite]上文本列的离散值排序
EN

Stack Overflow用户
提问于 2011-11-08 21:12:27
回答 3查看 671关注 0票数 1

我想根据文本(或枚举)列的一组有限值的任意顺序对表中的行进行排序。例如,如果列"Classes“可以具有值A、B、C、D,我希望能够按A>C>B>D或其他组合对行进行排序,而不仅仅是按字母顺序或按枚举的本机顺序排序。这有可能吗?

理想情况下,我希望有一个在SQLite上工作的解决方案,但MySQL解决方案也会很有用。非常感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-08 21:17:38

如果mySQL和sqlite允许在ORDER BY子句中使用CASE (MSSQL确实如此,我认为其他系统没有理由不这样做),那么您可以使用如下内容:

代码语言:javascript
复制
ORDER BY CASE
         WHEN classes ='A' THEN 1
         WHEN classes ='C' THEN 2
         WHEN classes ='B' THEN 3
         WHEN classes ='D' THEN 4
         ELSE 5
         END CASE

如果该列可以包含任意特定顺序的多个选项,您也可以这样做:

代码语言:javascript
复制
ORDER BY CASE
         WHEN classes LIKE '%A%' THEN 1
         WHEN classes LIKE '%C%' THEN 2
         WHEN classes LIKE '%B%' THEN 3
         WHEN classes LIKE '%D%' THEN 4
         ELSE 5
         END CASE

虽然重载这样的字段不是正常的形式,通常也不推荐使用。

票数 1
EN

Stack Overflow用户

发布于 2011-11-08 21:17:17

代码语言:javascript
复制
ORDER BY field(column, 'A', 'C', 'B', 'D')

FIELD function in MySQL docs

票数 3
EN

Stack Overflow用户

发布于 2011-11-08 21:25:18

还有另一个变体-添加一个新的(临时?)表,如

代码语言:javascript
复制
class | rank
A     | 1
B     | 2
C     | 3
D     | 4

然后,您可以按class列连接表,并按rank排序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8050920

复制
相关文章

相似问题

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