背景:查询数据,需要根据不同性别选择不同的排序字段和排序规则,总体先按照性别排列,“女”排在“男”前,然后性别为“男”按照last_name,height,family_name,age进行升序排列,性别为“女”按照family_name,age,height,last_name降序排列,

CREATE TABLE friends (id int UNSIGNED not null auto_increment comment '主键',family_name VARCHAR(10) COMMENT '姓氏',last_name VARCHAR(20) COMMENT '名字',sex VARCHAR(2) COMMENT '性别',age int COMMENT '年龄',height int COMMENT '身高',PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='';
INSERT INTO friends(family_name,last_name,sex,age,height) values('wang','li','女',18,50),('li','piaoliang','女',19,51),('zhang','san','男',18,60),('liu','mei','女',17,46),('zhao','xiaoman','女',20,49),('chen','meng','男',16,55);

(1)mybatis项目:直接使用mybatis的动态SQL即可实现,例如

<select id="getInfo" resultType="java.util.Map">select * from friends order by convert(sex USING gbk) desc<choose><when test="sex == '女'">, family_name, age, height, last_name desc</when><when test="sex == '男'">, last_name, height, family_name, age desc</when></choose>
</select>

(2)如果无法在系统中使用动态SQL,可以在SQL中使用case when then else end语法来实现,不过case when then一般返回一个字段,对于这种多个字段的,可以采用如下方式

select * from friends order by convert(sex USING gbk) desc,case when sex = '女' then family_name else last_name end,case when sex = '女' then age else height end,case when sex = '女' then height else family_name end,case when sex = '女' then last_name else age end
desc

查询结果如下:

SQL语句中的convert是为了中文按照拼音排序,可参考:https://blog.csdn.net/yangfengjueqi/article/details/82683688

case when then 后返回多个值相关推荐

  1. python内置函数用来返回数值型序列中所有元素之和_语句x = 3==3, 5执行结束后,变量x的值为_学小易找答案...

    [判断题]不可以在同一台计算机上安装多个Python版本. [填空题]表达式[1, 2, 3]*3的执行结果为 [填空题]使用切片操作在列表对象x的开始处增加一个元素3的代码为 [填空题]Python ...

  2. js:点击button后返回值

    问题:点击button后返回值只有点击的位置(x,y)信息,如何返回button上的文字信息 栗子: 探索角度 点击button后的返回值好像是不会包含button上的文本信息的 解决方法还不知道 应 ...

  3. php-使用函数array_walk_recursive处理多维数组的键值后返回一个新数组

    php-使用函数array_walk_recursive处理多维数组的键值后返回一个新数组 $result = array(); //$content是一个多维数组 $walk = array_wal ...

  4. 如何点击按钮弹出新窗口,输入数据后返回并刷新页面

    如何点击按钮弹出新窗口,输入数据后返回并刷新页面? 作者:孟宪会 出自:[孟宪会之精彩世界] 发布日期:2003年7月8日 4点0分13秒 在一些.NET论坛中有人经常会问:如何在页面中点击按钮打开新 ...

  5. 转载非原创:修改BB 的内容,回车后修改CC 的值

    原文 http://blog.csdn.net/iamah/article/details/8438981 修改BB 的内容,回车后修改CC 的值 步骤: 1. 注册类为对类CL_GUI_ALV_GR ...

  6. python如何返回多个值_python- 如何返回多个值 | 学步园

    如何写一个返回多个值的函数 函数的return 语句只能返回一个值,可以是任何类型. 因此,我们可以"返回一个 tuple类型,来间接达到返回多个值 ". 例:   x 除以 y ...

  7. Python学习入门基础教程(learning Python)--2.3.5Python返回多个值问题

    本节主要学习Python的函数是如何同时返回多个值的问题. 在学习Python的时候惊奇的发现,Python的函数可以同时返回多个值,很有意思. [python]view plaincopy #def ...

  8. JavaScript 返回多个值

    上一节的知识讲了带参数的函数,getArea用于计算桌子的面积,它返回一个值--桌子的面积. 有的时候需求还真复杂,还是拿桌子来说,要求同时计算桌子的桌面面积,还计算桌子的体积. 计算面积用长度x宽度 ...

  9. form + iframe 获取表单提交后返回的数据

    原理: submit 提交表单没有回调函数,但是可以用iframe来接收返回结果,最后进行格式转换就ok了: 原文地址: http://blog.csdn.net/simeng_1016/articl ...

最新文章

  1. iOS 根据数组中的字典的value值进行排序
  2. 需求评审五个维度框架分析及其带来的启示-2-框架原理
  3. jh锂电保护电路_锂电池过充电、过放电、过流及短路保护电路原理及电路图
  4. System.Type类
  5. 机器学习基础图表:概念、原理、历史、趋势和算法
  6. Overview of the New C++:C++0x
  7. Shell: /dev/null 21详解
  8. ActiveMQ之消息服务器平台(发邮件)
  9. JS变量中你不知道的小埋伏
  10. HandlerInterceptor 处理器拦截器的用法
  11. visual studio 中将选中代码相同的代码的颜色设置,修改高亮颜色
  12. .NET后台输出js脚本的方法
  13. pythonqq机器人酷q_NoneBot+酷Q,打造QQ机器人
  14. openCv 图像顺时针 逆时针旋转
  15. matlab 图中图
  16. 【十三香吗?】网易严选-苹果12商品评论数据可视化分析
  17. centos彻底删除文件夹、文件命令
  18. Redis 总结 —— 2022/2/4
  19. 实例掌握Hadoop MapReduce
  20. 国际青少年计算机技能大赛英语,竞赛:2017中学生英语能力、青少年信息学奥赛!...

热门文章

  1. 北京交通大学计算机全球排名,2017美国研究生计算机专业排名 - 2017北京交通大学计算机考研成绩310分,能调剂到什么大学...
  2. 我敢打赌你一定不知道的软件测试基础知识整理
  3. CIO40: 2020年IT人员如何借机破局
  4. 桥接的虚拟机无法ping通物理机
  5. QQ群创建者和管理员
  6. [校园网]绕过校园网使用自己服务器流量教程
  7. 5-Selenium WebDriver三种等待--隐式等待-显式等待和流畅等待
  8. 算术左移、算术右移、逻辑右移
  9. 水果店做生意不好怎么办,水果店生意不好如何做好
  10. 微信H5如何直接关注公众号