扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
通过group by就可以一次性返回结果集了
超过10多年行业经验,技术领先,服务至上的经营模式,全靠网络和口碑获得客户,为自己降低成本,也就是为客户降低成本。到目前业务范围包括了:成都做网站、网站建设,成都网站推广,成都网站优化,整体网络托管,小程序定制开发,微信开发,重庆APP开发,同时也可以让客户的网站和网络营销和我们一样获得订单和生意!
1
select FROM_UNIXTIME(date,'%m.%d'),count(1),sum(money) from tests where date='startTimes' and date='endTimes' group by FROM_UNIXTIME(date,'%m.%d')
你拿这个去执行
select FROM_UNIXTIME(date,'%m.%d'),count(1),sum(money) from tests where date=1469980800 and date=1470585599 group by FROM_UNIXTIME(date,'%m.%d');
这个返回的结果就是8月1号~8月7号每天的数据量及金额
只有一个参数的话,if(rs.next())先判断一下,然后就看你存放的是什么类型的数据了,那个src是String类型的还是URL类型的?rs.getString(1)或者rs.getURL(1)来得到该数据的引用。在ResultSet中取数据之前都要使用rs.next()方法,一个数据的话就是if(rs.next());多个数据的话就是while(rs.next())。每次读出数据后结果集的游标自动下移。鉴于你所说只有一个参数,那么列的索引就应该是一。
存储过程经常需要返回多个结果集。 Mysql 中直接用 select 即可返回结果集。而 oracle 则需要使用游标来返回结 果 集。这一点 Mysql 相对比较方便,如下代码即可实现输出两个结果集:
CREATE PROCEDURE test_proc_multi_select()
BEGIN
select * from testproc;
select * from testproc where id=1;
END;
java 中利用循环,即可获取结果集数据:
con = MConnection.getConn();
String sql = "{call test_proc_multi_select()}";
cs = con.prepareCall(sql);
boolean hadResults = cs.execute();
int i = 0;
while (hadResults) {
System.out.println("result No:----" + (++i));
ResultSet rs = cs.getResultSet();
while (rs != null rs.next()) {
int id1 = rs.getInt(1);
String name1 = rs.getString(2);
System.out.println(id1 + ":" + name1);
}
hadResults = cs.getMoreResults(); // 检查是否存在更多结果集
}
MySQL中的UNION
ALL
而UNION
ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。
从效率上说,UNION
ALL
要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION
ALL,如下:
select
*
from
gc_dfys
union
all
select
*
from
ls_jg_dfys
使用Union,则所有返回的行都是唯一的,如同您已经对整个结果集合使用了DISTINCT
使用Union
all,则不会排重,返回所有的行
如果您想使用ORDER
BY或LIMIT子句来对全部UNION结果进行分类或限制,则应对单个地SELECT语句加圆括号,并把ORDER
BY或LIMIT放到最后一个的后面:
(SELECT
a
FROM
tbl_name
WHERE
a=10
AND
B=1)
UNION
(SELECT
a
FROM
tbl_name
WHERE
a=11
AND
B=2)
ORDER
BY
a
LIMIT
10;
麻烦一点也可以这么干:
select
userid
from
(
select
userid
from
testa
union
all
select
userid
from
testb)
as
t
order
by
userid
limit
0,1;
如果你还想group
by,而且还有条件,那么:
select
userid
from
(select
userid
from
testa
union
all
select
userid
from
testb)
t
group
by
userid
having
count(userid)
=
2;
注意:在union的括号后面必须有个别名,否则会报错
当然了,如果当union的几个表的数据量很大时,建议还是采用先导出文本,然后用脚本来执行
因为纯粹用sql,效率会比较低,而且它会写临时文件,如果你的磁盘空间不够大,就有可能会出错
Error
writing
file
'/tmp/MYLsivgK'
(Errcode:
28)
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流