mysql-Mysql 查询语句怎么写?

问题描述

Mysql 查询语句怎么写?

开发市场调查业务,有一个调查问题表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高手,有没有办法能加快计算速度。

解决方案

调查有多少人的回答是类似如下这样的组合:
1. 回答问题Q1,答案是1或8或9
并且
2. 回答问题Q2,答案是1或8或9
并且
。。。。。。你的意思是调查所有组合数据是吗 如 Q1 ....Q20都是选 (1or8or9 )这3个答案范围的有多少人是吗

解决方案二:

我理解一下是不是一个调查客户他回答 30个问题 他30个问题都选(1 8 9)的范围的 统计+1

解决方案三:

是的。是所有被调查者回答的30个问题中选中8个问题,如果这8个问题的答案都是1或8或9,就+1

解决方案四:

比如,被调查者A回答了30个问题,其中Q2A到Q2H这8个问题很重要,如果这8个问题的答案都是1或8或9,那么+1.
这样调查了10000个人后,我们要看有多少人是符合以上的这个条件的。
但因为这10000个人是和不同的部门关联的,所以我们想用group by section_unique_id来得到每个部门符合这个条件的被调查者有多少。

时间: 2024-08-03 15:42:07

mysql-Mysql 查询语句怎么写?的相关文章

如何启用MySQL的查询语句缓存

我们写的程序可能需要进行大量的数据库操作.数据库常常会成为产生瓶颈的原因. 开启查询语句缓存也是优化MySQL的一个策略. MySQL 是我们开发程序常用的数据库.它具有在内存中缓存常用查询语句的能力,这样一个给定的查询语句再次被调用时,MySQL将立即从缓存中将其返回.然而, 在大多数MySQL中,这一特性默认是被禁用的.为了启用它,向你的MySQL配置选项文件添加以下代码:该配置文件的名称为my.cnf,它用来声明变量和你的MySQL服务器的行为(参看http://dev.mysql.com

mysql复杂查询语句求助

问题描述 mysql复杂查询语句求助 现在有一个表a,里面有一列为time,jsp中有两个变量fnum(本页首数),lnum(本页尾数) ,如何实现按照time倒序排列并且每页在fnum,lnum之间呢 select * from a where time limit fnum,lnum order by time desc??这样感觉不大对...求大虾解答 解决方案 select t.* from (select * from a where time limit fnum,lnum) t o

整理MySql常用查询语句(23种)_MsSql

废话不多了,直接贴代码了 一查询数值型数据: SELECT * FROM tb_name WHERE sum > 100;  查询谓词:>,=,<,<>,!=,!>,!<,=>,=< 二查询字符串 SELECT * FROM tb_stu WHERE sname = '小刘' SELECT * FROM tb_stu WHERE sname like '刘%' SELECT * FROM tb_stu WHERE sname like '%程序员' S

整理MySql常用查询语句(23种)

废话不多了,直接贴代码了 一查询数值型数据: SELECT * FROM tb_name WHERE sum > 100; 查询谓词:>,=,<,<>,!=,!>,!<,=>,=< 二查询字符串 SELECT * FROM tb_stu WHERE sname = '小刘' SELECT * FROM tb_stu WHERE sname like '刘%' SELECT * FROM tb_stu WHERE sname like '%程序员' SE

hql 多对一查询语句如何写

问题描述 hql 多对一查询语句如何写 public A { private long id; private String a; private B b; } public B{ private long id; private String b; } 现在我知道了B类的id和A类的变量a,要查出整个A类,hql语句怎么写啊,在线急等,求大神指点 解决方案 hibernate查询语句--HQLhibernate查询语句--HQLhibernate查询语句--HQL 解决方案二: 是B类的所有I

数据库-sqlite查询语句怎么写

问题描述 sqlite查询语句怎么写 有2个表S.C, S有字段sId(主键), sName, C有字段cId(主键).sId(外键).cTime 假设S数据为: sId, sName a, 哈 b, 呵 C数据为: cId, sId, cTime, cValue 1, a, 100, xxx 2, a, 111, yyy 3, b, 123, zzz 4, b, 234, hhh 现在我要查询的结果为: sId , sName, cTime, cValue a, 哈, 111, yyy b,

这个查询语句怎么写?

问题描述 f_projectidf_typef_price12外包117外包2221材料417材料5017货运551出差33一张表的结构是这样的:项目id付款类型金额f_projectidf_price外包f_price材料f_price货运f_price出差f_price总计1040333717222505503271210001现在根据类型和项目id来统计一个项目的总支出?sql查询语句怎么写?谁能告诉下我 解决方案 解决方案二:这结帖率解决方案三:selectf_projectid,sum

mysql query 查询语句

MySQL查询 到目前为止,我们已经看到一对夫妇不同用途的PHP的mysql_query功能,我们将看到更多的是几乎所有在PHP MySQL的工作是通过MySQL查询功能.我们已经创造了一个新的表和数据插入到该表.在这一课,我们将涵盖最常见的MySQL查询,用于检索信息的数据库. 检索数据用PHP与MySQL的 通常所作的大部分工作与MySQL涉及拉下数据从MySQL数据库. MySQL中的数据检索与"选择"的关键字.想想作为工作选择同样的方式,因为它不会在您的计算机上.如果你想复制一

MySql日期查询语句详解_Mysql

使用DATE_FORMAT方法SELECT * FROM `ler_items` WHERE DATE_FORMAT(postTime,'%Y-%m')='2013-03'注意:日期一定要用'',否则没有效果其它的一些关于mysql日期查找语句mysql> select date_format(DATE_SUB(CURDATE(), INTERVAL 7 DAY),'%y%m%d');+-------------------–+| date_format(DATE_SUB(CURDATE(),