最近写个小程序,把EXCEL当数据库来查询,七八个结构一样的文件进行统计查询
语句就是类似下面这样的:
select count(*) as total from [Sheet1$] where english>80
select sum(总分) as ok from [Sheet1$] where name>'陈媛媛'这样的查询很多,大概几十个查询语句,文件也很大,每个文件记录有几十万行
我反复的rs.Close再rs.Open感觉慢得要命现在就想问问,有没有快一点的方法,是不是可以让这些SQL语句都集中起来,可是WHERE条件不一样怎么写在一起呢?
语句就是类似下面这样的:
select count(*) as total from [Sheet1$] where english>80
select sum(总分) as ok from [Sheet1$] where name>'陈媛媛'这样的查询很多,大概几十个查询语句,文件也很大,每个文件记录有几十万行
我反复的rs.Close再rs.Open感觉慢得要命现在就想问问,有没有快一点的方法,是不是可以让这些SQL语句都集中起来,可是WHERE条件不一样怎么写在一起呢?
SELECT 总记录数=(select count(*) as total from [Sheet1$] where english>80),
总分=(select sum(总分) as ok from [Sheet1$] where name>'陈媛媛')
查询条件:OR
然后用代码生成SQL……
不用关闭,直接执行open
查询的条件不同是小的方面,查询的数据不同(目的)是关键.
如果要查询的数据是相同结构,或者性质一样,才可以将条件直接连起来.
查询语句多,文件多,好慢,真烦躁ameken的方法我试了,怎么没什么效果呢?
比如我要查询语文、英语、数学三个学科成绩不为空的,我要写三个查询语句查询三次
如何用一个查询得到三个结果?要完整的可以用的SQL再比如我要查询语文80分以上,85分以上,90分以上,80到85分之间,85到90分之间,90分到95分之间的总人数,我要写好多查询语句一个一个查询,有没有办法一次查询就得到这些结果呢?难道我要select * from [sheet1$] 然后一个一个算?
create table tu(
id int,
name varchar(8),
courge varchar(16),
score int
);Load Data InFile 'd:/text2.txt' Into Table `tu` Fields Terminated By ',';text2.txt
1,a,yuwen,78
1,b,yuwen,90
1,c,shuxue,85
1,d,yuwen,72
1,e,yinyue,88
1,a,shuxue,92
1,b,yingwen,81
1,c,yingwen,70
1,d,yinyue,75
1,e,shuxue,92
1,f,yingwen,71
1,g,yingwen,80
mysql> select * from masterdata.tu;
+------+------+---------+-------
+ | id | name | couage | score |
+------+------+---------+-------
+ | 1 | a | yuwen | 78 |
| 1 | b | yuwen | 90 |
| 1 | c | shuxue | 85 |
| 1 | d | yuwen | 72 |
| 1 | e | yinyue | 88 |
| 1 | a | shuxue | 92 |
| 1 | b | yingwen | 81 |
| 1 | c | yingwen | 70 |
| 1 | d | yinyue | 75 |
| 1 | e | shuxue | 92 |
| 1 | f | yingwen | 71 |
| 1 | g | yingwen | 80 |
+------+------+---------+-------+
12 rows in set (0.01 sec) mysql> select elt(interval(score,0,80,86,90),"0-79","80-85","86-89",">90") as score,count(*) as totalperson from masterdata.tu group by elt(interval(score,0,80,86,90),"0-79","80-85","86-89",">90");
+-------+-------------+
| score | totalperson |
+-------+-------------+
| 0-79 | 5 |
| 80-85 | 3 |
| 86-89 | 1 |
| >90 | 3 |
+-------+-------------+
4 rows in set (0.00 sec)
比如我要查询语文、英语、数学三个学科成绩不为空的,我要写三个查询语句查询三次
如何用一个查询得到三个结果?要完整的可以用的SQL 如何用一个查询得到三个结果? 是一个查询3个结果集(这个实现不了),还是一个结果集?
我自己试了一下,select * from [sheet1$]然后一个一个判断,不为空就+1,遍历一次就够了,得到3个结果的速度还快些
用3个查询语句查询三次得到这3个结果,慢太多了
COUNT(chinese) AS C1,
COUNT(english) AS C2,
COUNT(mathematics) AS C3
FROM [Sheet1$]
返回的为总数和三个学科非空的记录数,分别减一下就处理了。SELECT chinese\5 AS G,
COUNT(*)
FROM [Sheet1$]
GROUP BY chinese\5
用整除将每 5 分一个段落的数量统计出来了,你只要遍历记录,将数量加到各个对应的输出项上。
数据量大就应该考虑数据库了 EXCEL不建议做这么细的统计