首页新闻找找看学习计划

一个统计销量的sql问题

0
悬赏园豆:50 [已解决问题] 解决于 2016-02-25 12:06

现在有2个表,

表A:             表ID   订单产品id    订单id   产品id    产品数量

          1    1      1   233   1

          2    2      1   255   3

          3    1      2   266   5

          4    2      2   233   5

表B:      表ID     关联表A的ID    订单id  订单产品id   产品属性     产品属性值   

          1     1     1     1    aa     a1234

          2     1     1     1    bb     b1234

          3     2     1     2    ac      abc

          4     3     2     1    cc      acc

          5     4     2     2    aa      a1234

          6     4     2     2    bb     b1235 

大概这样2个表。。。。现在想要统计每种产品销量, 如果产品的属性值不同算2个产品要分别统计(有些产品有5+个属性)。。。  我现在头大如斗  毫无头绪  求大神解救 。。要死了。。。

问题补充:

select sum(op.产品数量) as 销量, pd.产品名称, op.产品id   from 表A op     left join 订单表 o ON(op.订单id= o.订单id)      left join 产品详情表 pd       on (pd.产品id= op.产品id)   left join 产品分类表 q    on (q.产品id= op.产品id)    where pd.language_id = 1    AND (o.orders_status = 2 OR o.orders_status = 3 OR o.orders_status = 4)         group by pd.产品id    order by 销量DESC, 产品名称         这是我没有关联表B产品属性的统计销量的sql语句,   其中产品分类表和产品详情表  订单表 没什么影响应该  所以没有举出来, 现在要关联上面表B。。搞不定的说= = 

清风飘零的主页 清风飘零 | 初学一级 | 园豆:151
提问于:2016-02-25 11:27
< >
分享
最佳答案
1

select 订单产品id,产品属性,产品属性值,count(订单产品id) as 销量 from 表B group by 订单产品id,产品属性,产品属性值

收获园豆:40
刘宏玺 | 专家六级 |园豆:14004 | 2016-02-25 11:35

产品数量在表A里,  订单产品id不是产品id   产品id在表A里 需要关联表A...大神= =   求解 

清风飘零 | 园豆:151 (初学一级) | 2016-02-25 11:41

@请风飘零: 

select 产品id,产品属性,产品属性值,sum(产品数量) as 销量 from 表B

left join 表A on  表B.关联表A的ID = 表A.表ID

group by 产品id,产品属性,产品属性值

刘宏玺 | 园豆:14004 (专家六级) | 2016-02-25 11:44

@刘宏玺: 多谢大神了。  解决了。。。之前老想着把表B放到表A后面。。。脑袋坑了   虽然速度慢些 但是可以交差了= =

清风飘零 | 园豆:151 (初学一级) | 2016-02-25 12:01

@刘宏玺: 大神,我突然发现你这个  有一个很关键的问题没有弄出来阿   这个查询还要获取这个产品的属性,而产品属性是多条的   这么查只会显示一条了   需要把所有属性都查出来的  可以查出来么?  

清风飘零 | 园豆:151 (初学一级) | 2016-02-25 15:40

@清风飘零: 既然都使用 group by 产品属性 了,说明已经分组了,多条是重复一样的数据

刘宏玺 | 园豆:14004 (专家六级) | 2016-02-25 15:45

@刘宏玺: 所以我说这个查询有问题阿   大神你还没理解    这里B表有些产品是有多行属性的    多行属性是不同的      我看了下 group by产品属性  只是分组了 最后一条属性了   而前面几条属性并没有分组  

清风飘零 | 园豆:151 (初学一级) | 2016-02-25 15:52

@清风飘零: 不会的,怕是你写where过滤掉了

刘宏玺 | 园豆:14004 (专家六级) | 2016-02-25 15:54

@刘宏玺: 哦哦  是我错了。。。确实分组了   可是产品那面想要把其他行属性也显示出来 。。。可以做到么?

清风飘零 | 园豆:151 (初学一级) | 2016-02-25 15:56

@清风飘零: 可以啊,加查询字段的时候把字段名同样加到group by后面就行了

刘宏玺 | 园豆:14004 (专家六级) | 2016-02-25 15:58

@刘宏玺: 字段都是产品属性和  产品属性值   是放在一起的   只不过属性不同    例如   第一个属性是长度  1M   第二个属性是直径  3mm      字段是一样的   Groupby  查出来的只是不同的哪一行    而相同的能显示出来么

清风飘零 | 园豆:151 (初学一级) | 2016-02-25 16:00

@清风飘零: 那不能加这种字段,可以加入子查询

select 产品id,产品属性,产品属性值,sum(产品数量) as 销量,

(select 产品属性 from 产品表 where 产品id = 表A.产品id)

 from 表B

left join 表A on  表B.关联表A的ID = 表A.表ID

刘宏玺 | 园豆:14004 (专家六级) | 2016-02-25 16:04

@刘宏玺: 不需要group by了么?   

清风飘零 | 园豆:151 (初学一级) | 2016-02-25 16:18

@清风飘零: 需要,忘记复制了

刘宏玺 | 园豆:14004 (专家六级) | 2016-02-25 16:19

@刘宏玺: 带group by的话 sql不是就会报#1242 - Subquery returns more than 1 row     大于一行了么?

清风飘零 | 园豆:151 (初学一级) | 2016-02-25 16:20

@刘宏玺: 好吧 不是group by的问题    加子查询 就会报上面哪个sql错误  怎么解决呢?

清风飘零 | 园豆:151 (初学一级) | 2016-02-25 16:22

@清风飘零: 产品属性值 能不能确定唯一?能的话就把产品换成 产品属性值

反正你必须要能确定唯一

刘宏玺 | 园豆:14004 (专家六级) | 2016-02-25 16:22

@刘宏玺: 好吧 我在自己研究下吧  麻烦你了  多谢了

清风飘零 | 园豆:151 (初学一级) | 2016-02-25 16:31
其他回答(1)
1

group by 的时候加上产品属性自然就分开统计了,1万个属性也没事。

收获园豆:10
爱编程的大叔 | 园豆:30471 (高人七级) | 2016-02-25 11:38

能举个栗子么。。。这2个表关联  group by  查询卡死了。。。

支持(0) 反对(0) 清风飘零 | 园豆:151 (初学一级) | 2016-02-25 11:43

@请风飘零:

Select ProductID, ProductSpecification, sum(Quantity)  from Table 

group by ProductID, ProductSpecification

通常这样的设计较多见于服装、鞋帽等需要颜色、尺码的商品,

这类系统的设计难度和实施难度比普通的超市进销存高一个数量级,没经验的会以为差不多,

不就加一个属性吗,2分钟就好了。

 

查询卡死那是另外一个问题了。

设计能力、分析系统复杂度的能力,不是一天就能学会的,

你这明显是接了一个自己能力之外的任务。

如果是公司上班,问问领导,有没有啥技术外的解决方案。

查询卡可以通过

1、视图

2、存储过程

3、减少查询数据量

等方法解决。

支持(1) 反对(0) 爱编程的大叔 | 园豆:30471 (高人七级) | 2016-02-25 11:55

@爱编程的大叔: 多谢了。。受教了   根据上面  解决了查询问题   但是速度还是慢 。这个我就跟领导反映下问题了= =不是我能解决的了。

支持(0) 反对(0) 清风飘零 | 园豆:151 (初学一级) | 2016-02-25 12:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册