作者jonce007 (汪汪)
看板Database
标题Re: [SQL ] SQL新手问语法。
时间Fri Nov 1 09:30:14 2013
: 目前是用
: select no, count(*) as tno , sum(amt) as tamt from tb_a group by no
: union
: select '合计' as no, count(*) as tno , sum(amt) as tamt from tb_a
: 但是这样,server应该会跑两次运算吧。
:
: 可以group完再group同时出现 row 1-4,而server端只运算一次吗?
:
: 我试过subselect
:
: select '合计' as no, sum(tno), sum(tamt) from
: (select no, count(*) as tno , sum(amt) as tamt from tb_a group by no ) as t1
: 但这也只是我要的row 4, row 1-3不见了。
: 想不出来啊,请提示一下好吗? 感恩。
:
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 1.164.2.207
: → bohei:感觉无论如何都一定要两次 10/31 23:33
: → bohei:第一次先group第二次才能去sum 10/31 23:34
感谢b大的回应
我的意思是,如果资料库有100万笔
用之前union的写法,server 不就要算200万笔?
第一次算完100万笔後,如果得到3000笔,
希望只再算这3000笔做加总。
有 select count(*),sum(xx).. group by xx to temp t1 这种功能的语法吗?(MYSQL)
^^^^^^^^^^^
如果有,之後就能写成 t1 所有的row union t1 total的row
select * from temp table t1
union
selct count(*),sum(xx) from t1;
delete temp table t1;
如果不行或很复杂,考量server负担,在local端计算再自行补上最後这笔total
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.43.36.53
※ 编辑: jonce007 来自: 114.43.36.53 (11/01 09:31)
1F:→ bohei:嗯..mysql有TEMP TABLE,但我不确定有没有你那种写法 11/01 11:53
2F:→ bohei:但照你这个写法,也是要先GROUP BY 一次不是吗 11/01 11:54
3F:→ bohei:除非你这句SQL每次处理的资料都相同,不然你每遇到一次 11/01 11:56
4F:→ bohei:就要重新INSERT TEMP一次,应该差不了多少吧? 11/01 11:56
5F:→ jonce007:看来就client端自己加总吧..... 11/01 12:26
6F:→ jonce007:感谢b大 11/01 12:27
7F:→ bohei:唉呀呀 我只是推测XD 11/01 12:28