MySQL 按自定义列选择顺序

标签 mysql sql

这是我的 table :

id | val | flag
---|-----|------
 1 | 10  |  no
---|-----|------
 2 | 5   | yes
---|-----|------     
 3 | 3   | yes
---|-----|------     
 4 | 25  | no
---|-----|------     
 5 | 8   | no
---|-----|------     

基本上我想选择id +自定义列自定义列desc排序,其中:

custom column = val     (if flag = no)
custom column = val * 2 (if flag = yes)

我的选择结果应该输出:

| id | cus | 
|----|-----|
|  4 | 25  |
|----|-----|
|  1 | 10  |
|----|-----|   
|  2 | 10  | 
|----|-----|    
|  5 | 8   | 
|----|-----|    
|  3 | 6   |
|----|-----|

不要问我尝试了什么,因为我是 mysql 新手。我知道如何在 php 中执行此操作,但我想最好从 mysql 端处理此操作。

最佳答案

我认为你可以这样做:

select t.*
from t
order by (case when flag = 'no' then val when flag = 'yes' then 2*val end) desc, id;

注意:如果flag只能是“no”或“yes”,则将其简化为:

select t.*
from t
order by (case when flag = 'no' then val else 2*val end) desc, id;

关于MySQL 按自定义列选择顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43380110/

相关文章:

php mysql,变量帮助查询帮助

php - 从复杂的 MySQL 选择查询中删除重复项

MySQL 推荐 InnoDB 的小写表名

php - 报表生成器 php mysql

java - 如何在java中获取按日期的销售情况?

php - 记录集的 Netbeans 代码完成

sql - 由 FK 链接的表中的重复行

mysql - MySQL数据库开发问题

MySQL - 联合还是加入?

php - 拉维尔 5.5 : array_combine(): Both parameters should have an equal number of elements