在MySQL中按2列排序并设置重要性级别

时间:2013-10-23 09:54:25

标签: mysql sql-order-by

我正在尝试按我的两个数据库列结果对数据进行排序。

目前我的数据样本如下:

name   type   state
paul   1      expired
john   3      expired
greg   1      active
jane   3      expired
joan   3      active
judy   2      expired

我想首先按活动显示数据,然后按类型显示我的数据:

name   type   state
greg   1      active
paul   1      expired

joan   3      active
jane   3      expired
john   3      expired

judy   2      expired

我尝试了几种组合:

ORDER BY type desc, state desc

允许我按类型排序,但不允许我先放入所有活动的。我也按州排序,然后键入,但是将所有活动的放在顶部,然后按类型排序。

欢迎任何建议!

我试着找到答案时看了这两个帖子到目前为止我没有运气。

ORDER BY an equal value in MySQL

Conditional MySQL order by two (equally important) columns

---- ---- EDIT

如果我按

订购
ORDER BY state, type

我得到以下结果:

name   type   state
greg   1      active
joan   3      active
paul   1      expired
john   3      expired
jane   3      expired
judy   2      expired

----编辑2 ----

如果我按

订购
ORDER BY type, state

我得到以下结果,中间过期,我希望能够首先强调显示活动记录,因为这只是一个更大的数据集的一个小样本:

name   type   state
greg   1      active
paul   1      expired
judy   2      expired
joan   3      active
john   3      expired
jane   3      expired

感谢您的期待!

2 个答案:

答案 0 :(得分:3)

在您的ORDER BY声明中,状态“有效”在字母顺序中“过期”之前,因此您需要按ASCENDANT排序

编辑:为了获得您提出的确切输出,您可以使用ORDER BY FIELD(fieldname, '1st val', '2nd val')来自定义确切的顺序:

ORDER BY FIELD(`type`, 1, 3, 2), FIELD(`type`, "active", "expired");

答案 1 :(得分:1)

试试这个::

Select 
* 
from 
myTable
GROUP BY state, type HAVING STATE='active'
    ORDER BY `TYPE`, `state`