以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 分组统计与占比统计的问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=54091) |
-- 作者:scott518 -- 发布时间:2014/7/21 21:08:00 -- 分组统计与占比统计的问题 帮助中用如下语句分组统计 \'定义一个GroupTableBuilder,名称为"统计表1",对订单表进行统计。
直接用SQL语句如下: Select 客户,year(制单日期),sum(数量) as 数量,sum(金额) as 金额 from 订单明细 a inner join 订单 b on a.订单编号 = b.订单编号 flt_where group by 客户,year(制单日期)
这两种方式是相同的吗?哪种效率更高?
帮助中用g.GrandProportion = True就可以实现占比统计,如果直接用SQL语句,要如何进行占比或份额统计,难道要用分组的和再去除以总数的和吗? 谢谢! |
-- 作者:有点甜 -- 发布时间:2014/7/21 21:17:00 -- 如果是sqlGroupTableBuilder,和sql语句效率一样,因为最后也是生成一条sql语句执行的。
但是 GroupTableBuilder 统计的是加载后的表,不是统计后台数据库,跟sql语句不是一样,所以无法比较。
明显 GroupTableBuilder 会快一点点,因为已经把表加载了进来。 |
-- 作者:scott518 -- 发布时间:2014/7/21 21:28:00 -- 因为表全部是用table动态加载表结构的,查询统计时没有加载任何表,是直接用sql语句从后台的数据库中分组统计后datasurced绑定到窗口的sqltable中的,这样要如何进行占比,份额等类似的统计呢?可以在查询表生成后再用GroupTableBuilder中的g.GrandProportion = True这样的代码统计吗,但此时已经不用b.Groups.AddDef("产品") 分组了,这样占比统计可以吗?如果不可以,直接用sql如何进行占比统计?请甜老师提点一下。 |
-- 作者:有点甜 -- 发布时间:2014/7/21 21:33:00 -- sql语句计算占比,这样弄
select *, 数量 / sum(数量) * 100 as 占比 from (Select 客户,year(制单日期),sum(数量) As 数量,sum(金额) As 金额 from 订单明细 a inner join 订单 b on a.订单编号 = b.订单编号 flt_where group by 客户,year(制单日期)) c |
-- 作者:scott518 -- 发布时间:2014/7/21 21:55:00 -- 谢谢! |
-- 作者:scott518 -- 发布时间:2014/7/21 22:55:00 -- Select *, 数量/sum(数量) * 100 As 占比 from (Select 客户,Year(制单日期) as 年,Month(制单日期) as 月,sum(数量) as 数量,sum(金额) as 金额 from 订单明细 a inner join 订单 b on a.订单编号 = b.订单编号 group by 客户,Year(制单日期),Month(制单日期) ) c
加了sum后会提示出错如下:不用sum函数就可以。
.NET Framework 版本:2.0.50727.5477 |
-- 作者:有点甜 -- 发布时间:2014/7/21 22:58:00 -- 感觉不应该报错才对。select * from c 的时候和分组无关了的。 |
-- 作者:scott518 -- 发布时间:2014/7/21 23:04:00 -- 如果这样就可以,不知道为什么?当然这样占比没意义,只是说明语句执行就不报错,正确输出
Select *, 数量/数量 * 100 As 占比 from (Select 客户,Year(制单日期) as 年,Month(制单日期) as 月,sum(数量) as 数量,sum(金额) as 金额 from 订单明细 a inner join 订单 b on a.订单编号 = b.订单编号 group by 客户,Year(制单日期),Month(制单日期) ) c |
-- 作者:有点甜 -- 发布时间:2014/7/21 23:15:00 -- 感觉不应该,没理由,你试试这样
Select 客户, (数量/sum(数量) * 100) As 占比 from (Select 客户,Year(制单日期) As 年,Month(制单日期) As 月,sum(数量) As 数量,sum(金额) As 金额 from 订单明细 a inner join 订单 b on a.订单编号 = b.订单编号 group by 客户,Year(制单日期),Month(制单日期)) c |
-- 作者:有点甜 -- 发布时间:2014/7/21 23:17:00 -- 或者可以试试这样,效率虽然低了一些。
Select 客户,Year(制单日期) As 年,Month(制单日期) As 月,sum(数量) As 数量,sum(金额) As 金额, sum(数量)/(Select sum(数量) from 订单明细) as 占比 from 订单明细 a inner join 订单 b on a.订单编号 = b.订单编号 group by 客户,Year(制单日期),Month(制单日期) |