之前项目中需要写一个sql,就是查出某个调研详情中,选A答案,B答案,C答案...F答案的人各有多少人,这个sql也是费了很大的力气才写出来,故记下来,方便以后使用。

其中tbl_research_item为调研详情表,tbl_user_research_item为用户答题详情表

SELECTitem.research_id,item.item_id,item.question,item.question_type,item.option1,item.option2,item.option3,item.option4,item.option5,item.option6,sum(CASE WHEN (LOCATE('A', uitem.choose_option) > 0) THEN 1 ELSE 0 END) asoption1AnsCnt,sum(CASE WHEN (LOCATE('B', uitem.choose_option) > 0) THEN 1 ELSE 0 END) asoption2AnsCnt,sum(CASE WHEN (LOCATE('C', uitem.choose_option) > 0) THEN 1 ELSE 0 END) asoption3AnsCnt,sum(CASE WHEN (LOCATE('D', uitem.choose_option) > 0) THEN 1 ELSE 0 END) asoption4AnsCnt,sum(CASE WHEN (LOCATE('E', uitem.choose_option) > 0) THEN 1 ELSE 0 END) asoption5AnsCnt,sum(CASE WHEN (LOCATE('F', uitem.choose_option) > 0) THEN 1 ELSE 0 END) asoption6AnsCntFROMtbl_research_item itemLEFT JOIN tbl_user_research_item uitem ON (item.research_id=uitem.research_id and item.item_id=uitem.item_id)WHERE item.research_id = '10093'

and question_type != 'input'

GROUP BY item.item_id

由于每道调研的题目有可能为多选,也就是说,uitem.choose_option的值有可能为AB这样的,所以呢,这个sql的思路是当uitem.choose_option中先‘A’的位置大于0,就表示选了A,也就是记为1,否则为0,再将所有用户选了A的数量求和,因此得到了这个调研中这到题选A的总人数option1AnsCnt,其他的以此类推。

在这里顺便介绍一下sql中遇到的LOCATE和CASE WHEN...THEN...ELSE...END两个函数的用法:

1.LOCATE(substr,str) :返回子串 substr 在字符串 str 中第一次出现的位置。如果子串 substr 在 str 中不存在,返回值为 0

例如:select LOCATE('d', 'asdfghj')    --->3

2.CASE WHEN...THEN...ELSE...END

例如:

SELECT

case                   -------------如果

when sex='1' then '男' -------------sex='1',则返回值'男'

when sex='2' then '女' -------------sex='2',则返回值'女'

else '其他'            -------------其他的返回'其他’

end                   -------------结束

这个函数还有另外一种写法:

CASE sex

WHEN '1' THEN '男'

WHEN '2' THEN '女'

ELSE '其他' END

这两种写法都是可以的

mysql中的locate_mysql中LOCATE和CASE WHEN...THEN...ELSE...END结合用法相关推荐

  1. case zhen语句_SQL中的条件判断语句(case when zhen if,ifnull)用法

    三.IFNULL(expr1,expr2) 仅适用于mysql 假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2.IFNULL()的返回值是数 ...

  2. mysql 查询后根据值的不同进行判断与修改,SQL中的条件判断语句(case when zhen)用法

    需求: mysql 查询后根据值的不同进行判断与修改 语法结构: SQL中的条件判断语句(case when zhen)用法 SELECT A.品号,属性,        CASE           ...

  3. mysql sum when then_MySQL中group by , sum , case when then 的使用

    在我们使用数据库的时候,可能会遇到需要进行统计的情况. 比如需要统计一下,下表中各个年份的胜负场数. 遇到这样的情况,我们应该怎么办呢? 在mysql中我们可以使用group by sum  case ...

  4. MYSQL ifnull 函数 、if判断 、case when、 locate函数

    1.MYSQL  ifnull 函数 .if判断 .case when. locate (1).IFNULL(expr1,expr2) 如果expr1为空(即NULL),返回expr2,如果expr1 ...

  5. mysql中begin end中变量定义_DECLARE只能用于BEGIN…END的开头部分定义局部变量,其作用范围只能在该BEGIN…END中。_学小易找答案...

    [单选题]表达式select ((6%(7-5))+8)*9-2+(5%2) 的运算结果是______. [判断题]所有变量名@var1.@var2等必须以1个"@"开头,可以由当 ...

  6. mysql算法函数_mysql中的函数总结

    mysql中常用日期时间函数 MySQL服务器中的三种时区设置: ①系统时区---保存在系统变量system_time_zone ②服务器时区---保存在全局系统变量global.time_zone ...

  7. MySQL执行计划extra中的using index 和 using where using index 的区别

    本文出处:http://www.cnblogs.com/wy123/p/7366486.html  (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些 ...

  8. mysql 1044 4200_关于MySQL绕过授予information_schema中对象时报ERROR 1044(4200)错误

    这个问题是微信群中网友关于MySQL权限的讨论,有这么一个业务需求(下面是他的原话): 因为MySQL的很多功能都依赖主键,我想用zabbix用户,来监控业务数据库的所有表,是否都建立了主键. 监控的 ...

  9. mysql查询字段纯字母_解决MySQL之中一个字段中无法精准的查询多语言语言字母的问题...

    解决MySQL之中一个字段中无法精准的查询多语言语言字母的问题 解决MySQL之中一个字段中无法精准的查询多语言语言字母的问题 目录 1.使用场景 2.实现过程及展示结果 2.1.修改字段排序规则为u ...

最新文章

  1. 让 Spring Boot 启动更快一点
  2. 利用 Swoole 给应用写个防火墙
  3. 用HTTP协议连接网络(HttpURLConnection)
  4. mysql kingshard 扩容_如何用Go打造一个高性能mysql proxy
  5. iphone简单实例 (字体,弹出窗口) (实例)
  6. mongodb常用操作语句
  7. 身为前端工程师,对你来说,你认为最重要的是什么?
  8. pandas数据处理实践二(排序(sort_index()、sort_values())、连接(Concatenate(连接,串联)和Combine(结合、联合))
  9. 用Java实现多线程下载
  10. python3.8入门教程完整版_Python 3.8从入门到精通(视频教学版)
  11. linux如何设置显示器亮度调节软件,为 Linux 启用色温和亮度调节工具
  12. UML用例图中三种关系详解
  13. 关于计算球体体积的Java代码啾咪~
  14. 淘宝天猫春节照常发货—轻轻松松“淘宝式过年”
  15. 小米手机:雷布斯的米饭刚下锅
  16. java中各种O的含义(PO,VO,TO,QO,BO,DAO,DTO,POJO)
  17. 文章如何在paperpaper查重
  18. python参数化建模加工图_基于Python的ABAQUS层压板参数化建模
  19. 【Java多数据源实现教程】实现动态数据源、多数据源切换方式
  20. 【linux系统】ubuntu18.04蓝牙耳机没有声音

热门文章

  1. 斯福尼健康采暖,终结健康杀手——雾霾
  2. 使用百度在网络上搜索资料 在计算机,利用百度搜索资料认识计算机.doc
  3. 《张艺谋这个人》较真
  4. 单片机_PWM输出原理详解
  5. 「数据集」自动驾驶都有什么测试基准?
  6. 使用postman interceptor拦截浏览器和手机请求
  7. 光纤收发器指示灯的意义图解
  8. 和AWS云游四海@姓“诸葛”,名“io”
  9. 攻防世界 WEB leaking
  10. Android各种大内存脚本对比(app2sd,a2sd,a2sd+,d2sd,CronMod,Mound2SD)