如何在MySQL中按不同的值排序?

4

例子:

----------------------------------------------
P.No     |     Relation   |  Name 
----------------------------------------------
2        |     Self       | Kumar
----------------------------------------------
1        |     Husband    | Selvam
----------------------------------------------
2        |     Son        |  Manoj
----------------------------------------------
1        |    Self        |   Gandhi
----------------------------------------------

我应如何根据列值偏好对行进行排序?

我想要类似于这样的结果:

Order By P.No & 
 ( Self 1 st preference ,  
   Husband 2nd preference,
   son 3rd Preference ) 

我期望看到以下输出:
----------------------------------------------
P.No     |     Relation   |  Name 
----------------------------------------------
1        |      Self       |   Gandhi
----------------------------------------------
1        |     Husband    | Selvam
----------------------------------------------
2        |     Self       | Kumar
----------------------------------------------
2        |     Son        |  Manoj
----------------------------------------------

请帮助我解决我的问题。谢谢。


实际上,P.No订单也可以,但我需要优先考虑第二个订单。 - Dinesh G
4个回答

5
你希望将“自己、丈夫、儿子”这三个人进行比较,有几种方法可以实现:
1. 直接比较法:

The naive way:

直接比较每个人。
ORDER BY IF(Relation="Self",0,IF(Relation="Husband",1,2))

或者是时髦的方法:
ORDER BY (Relation="Self")+2*(Relation="Husband")+3*(Relation="Son")

4
我认为你可以尝试做以下操作:

我认为你可以尝试做以下操作:

order by p.`No`, `Relation`='Self', `Relation`='Husband', `Relation`='Son'

表达式Relation='Self'Relation='Husband'Relation='Son'返回01(按添加的顺序),取决于它们是否满足条件。因此可以生成所需的排序。
您还可以使用MySQL的FIELD函数,如下所示:
order by p.`No` ASC, FIELD(`Relation`,'Self,Husband,Son') ASC

非常感谢 @RamRaider。 - Dinesh G
欢迎,并感谢@Nikos M补充更多细节。 - Professor Abronsius

2
请尝试以下查询。
select *,if(Relation = 'Self',1,if(Relation = 'Husband',2,if(Relation = 'Son',3,4))) as rel_ord from table order by p.No asc ,rel_ord asc

0

按照偏好顺序列出它们即可。

ORDER BY P.No,Name,Relation ASC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接