开发市场调查业务,有一个调查问题表responses (一百万行), 是市场调查的原始数据,包含survey_id(调查表的类型列),response_no(被调查者列),interview_date(调查日期), question_label(问题列), value(回答列), section_unique_id(部门列)等。

每一行对应某个被调查者回答的一个问题和它的调查结果。一个被调查者一次会回答30个问题,所以会产生30行。

另有一个计算公式表 (40行), 是对调查结果的分析计算公式,这些公式都是sql语句。

根据计算公式,产生一个结果表results。

现在的问题是,要设计一些sql语句,调查有多少人的回答是类似如下这样的组合:

1. 回答问题Q1,答案是1或8或9

并且

2. 回答问题Q2,答案是1或8或9

并且

。。。。。。

最好能用group by section。

比如如下这个例子:

计算公式的说明是这样。

((Q2A = 1 OR Q2A = 8 OR Q2A = 9) AND (Q2B = 1 OR Q2B = 8 OR Q2B = 9) AND (Q2C = 1 OR Q2C = 8 OR Q2C = 9) AND (Q2D = 1 OR Q2D = 8 OR Q2D = 9) AND (Q2E = 1 OR Q2E = 8 OR Q2E = 9) AND (Q2F = 1 OR Q2F = 8 OR Q2F = 9) AND (Q2G = 1 OR Q2G = 8 OR Q2G = 9) AND (Q2H = 1 OR Q2H = 8 OR Q2H = 9) AND (Q2I = 1 OR Q2I = 8 OR Q2I = 9) AND (Q5 = 1 OR Q5 = 8 OR Q5 = 9) AND (Q6 = 1 OR Q6 = 8 OR Q6 = 9))

我现在写了这样一个mysql语句:

SELECT section_unique_id as "section_unique_id", COUNT(*) as "hit" FROM responses WHERE

question_label = "Q2A" AND value IN (1,8,9)

AND

(response_no, survey_id, interview_date) IN (SELECT DISTINCT response_no, survey_id, interview_date FROM responses WHERE question_label = "Q2B" AND value IN (1,8,9))

AND

(response_no, survey_id, interview_date) IN (SELECT DISTINCT response_no, survey_id, interview_date FROM responses WHERE question_label = "Q2C" AND value IN (1,8,9))

AND

(response_no, survey_id, interview_date) IN (SELECT DISTINCT response_no, survey_id, interview_date FROM responses WHERE question_label = "Q2D" AND value IN (1,8,9))

AND

(response_no, survey_id, interview_date) IN (SELECT DISTINCT response_no, survey_id, interview_date FROM responses WHERE question_label = "Q2E" AND value IN (1,8,9))

AND

(response_no, survey_id, interview_date) IN (SELECT DISTINCT response_no, survey_id, interview_date FROM responses WHERE question_label = "Q2F" AND value IN (1,8,9))

AND

(response_no, survey_id, interview_date) IN (SELECT DISTINCT response_no, survey_id, interview_date FROM responses WHERE question_label = "Q2G" AND value IN (1,8,9))

AND

(response_no, survey_id, interview_date) IN (SELECT DISTINCT response_no, survey_id, interview_date FROM responses WHERE question_label = "Q2H" AND value IN (1,8,9))

AND

(response_no, survey_id, interview_date) IN (SELECT DISTINCT response_no, survey_id, interview_date FROM responses WHERE question_label = "Q2I" AND value IN (1,8,9))

AND

(response_no, survey_id, interview_date) IN (SELECT DISTINCT response_no, survey_id, interview_date FROM responses WHERE question_label = "Q5" AND value IN (1,8,9))

AND

(response_no, survey_id, interview_date) IN (SELECT DISTINCT response_no, survey_id, interview_date FROM responses WHERE question_label = "Q6" AND value IN (1,8,9))

结果,运行一次,用了12秒,太慢了。

请教mysql高手,有没有办法能加快计算速度。

mysql教程查询语句_mysql-Mysql 查询语句怎么写?相关推荐

  1. [Mysql教程系列]介绍一下MySQL语句设计规范以及其他规范

    点击上方"Coder编程",选择"置顶公众号" 技术文章第一时间送达! mysql.jpg 语句设计规范 1.使用预编译语句 只传参数,比传递SQL语句更高效 ...

  2. mysql获取查询策略语句_MySQL数据库查询性能优化策略

    优化查询 使用Explain语句分析查询语句 Explain 用来分析 SELECT 查询语句,开发人员可以通过分析 Explain 结果来优化查询语句. 通过对查询语句的分析,可以了解查询语句的执行 ...

  3. mysql 关联查询慢_mysql慢查询语句分析总结

    我们经常会接触到MySQL,也经常会遇到一些MySQL的性能问题.我们可以借助慢查询日志和explain命令初步分析出SQL语句存在的性能问题 通过SHOW FULL PROCESSLIST查看问题 ...

  4. mysql修改的值子查询语句_MySQL的SQL语句 - 数据操作语句(13)- 子查询(13)

    子查询的限制 ● 通常,不能在子查询中修改表并从同一表中进行选择.例如,此限制适用于以下形式的语法: 1. DELETE FROM t WHERE ... (SELECT ... FROM t ... ...

  5. mysql去重复查询 性能_MySQL中distinct语句去查询重复记录及相关的性能讨论_MySQL...

    在 MySQL 查询中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值. 关键词 DISTINCT 用于返回唯一不同的值,就是去重啦.用法也很简单: SELE ...

  6. mysql去重复查询 性能_MySQL中distinct语句去查询重复记录及相关的性能讨论

    在 MySQL 查询中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值. 关键词 DISTINCT 用于返回唯一不同的值,就是去重啦.用法也很简单: SELE ...

  7. mysql 怎么查询慢sql语句_Mysql中 查询慢的 Sql语句的记录查找

    Mysql中 查询慢的 Sql语句的记录查找 慢查询日志 slow_query_log,是用来记录查询比较慢的sql语句,通过查询日志来查找哪条sql语句比较慢,这样可以对比较慢的sql可以进行优化. ...

  8. mysql select 指定列_MySQL使用select语句查询指定表中指定列(字段)的数据

    本文介绍mysql数据库中执行select查询语句,查询指定列的数据,即指定字段的数据. 再来回顾一下sql语句中的select语句的语法: select 语句的基本语法: select from w ...

  9. mysql 高级查询词_Mysql高级查询语句

    Exists子查询 Exists的特点 1.在执行create或drop语句前,可以使用exists语句来判断数据库对象是否存在,返回值是true或false drop table if exists ...

  10. mysql php 缓存机制_mysql数据库查询缓存原理是什么

    mysql数据库查询缓存原理是:1.缓存SELECT操作的结果集和SQL语句,key为sql,value为查询结果集:2.如果新的SELECT语句到了,以这个sql为key去缓存中查询,如果匹配,就把 ...

最新文章

  1. 工作?生活?快乐吗?
  2. iphone电池怎么保养_苹果iPhone手机怎么开启【优化电池充电】
  3. 区块链BaaS云服务(36)欧盟EBSI“使用场景”
  4. Tomcat配置问题解决方法
  5. Xcode4.5编译ffmpeg成功,过程说明
  6. 【Oracle经典】132个oracle热门精品资料——下载目录收藏 (转载)
  7. (林雷看来13):功能优先,发展和重建同步,业绩后
  8. Redis - 在电商购物车场景下的实战分析
  9. Unity Spine笔记
  10. 电子面单打印模板规格汇总-快递鸟
  11. 51单片机的汇编语言
  12. 基于SpringBoot和Vue的OA办公管理系统
  13. STM32F103_study56_The punctual atoms(STM32 PWM output experimental code analysis)
  14. 计算机数值怎么看大小,笔记本电脑尺寸怎么看_笔记本电脑尺寸查询
  15. IntelliJ IDEA 最新注册码(截止到2019年12月12日)
  16. C#几种读取文件的方式
  17. Ugui中使用Image完成动态连线
  18. 了解计算机的历史用英语怎么说,关于计算机发展历史的论文参考文献 计算机发展历史英语参考文献哪里找...
  19. OJ每日一练——爱跑步的师兄
  20. vue中 @scroll的使用

热门文章

  1. Linux命令解释之sed
  2. noi 7627 鸡蛋的硬度
  3. java swing 图片上加热点_外卖图片品牌全靠P,4元成本料理包加热后,平台上20元卖出...
  4. 全新安装2008操作系统和2008 server core核心安装
  5. DM6467T开发板领航——开发环境
  6. 全球通用头像gravatar介绍
  7. vue中v-model的使用
  8. [C++再学习系列] 具有链接的C++实体
  9. mysql 5.7基本优化_mysql5.7优化
  10. 请用旧版的 Scala-2.11 搭配 Spark-2.4.8 / hadoop-2.7