现在有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。。搞不定的说= =
select 订单产品id,产品属性,产品属性值,count(订单产品id) as 销量 from 表B group by 订单产品id,产品属性,产品属性值
产品数量在表A里, 订单产品id不是产品id 产品id在表A里 需要关联表A...大神= = 求解
@请风飘零:
select 产品id,产品属性,产品属性值,sum(产品数量) as 销量 from 表B
left join 表A on 表B.关联表A的ID = 表A.表ID
group by 产品id,产品属性,产品属性值
@刘宏玺: 多谢大神了。 解决了。。。之前老想着把表B放到表A后面。。。脑袋坑了 虽然速度慢些 但是可以交差了= =
@刘宏玺: 大神,我突然发现你这个 有一个很关键的问题没有弄出来阿 这个查询还要获取这个产品的属性,而产品属性是多条的 这么查只会显示一条了 需要把所有属性都查出来的 可以查出来么?
@清风飘零: 既然都使用 group by 产品属性 了,说明已经分组了,多条是重复一样的数据
@刘宏玺: 所以我说这个查询有问题阿 大神你还没理解 这里B表有些产品是有多行属性的 多行属性是不同的 我看了下 group by产品属性 只是分组了 最后一条属性了 而前面几条属性并没有分组
@清风飘零: 不会的,怕是你写where过滤掉了
@刘宏玺: 哦哦 是我错了。。。确实分组了 可是产品那面想要把其他行属性也显示出来 。。。可以做到么?
@清风飘零: 可以啊,加查询字段的时候把字段名同样加到group by后面就行了
@刘宏玺: 字段都是产品属性和 产品属性值 是放在一起的 只不过属性不同 例如 第一个属性是长度 1M 第二个属性是直径 3mm 字段是一样的 Groupby 查出来的只是不同的哪一行 而相同的能显示出来么
@清风飘零: 那不能加这种字段,可以加入子查询
select 产品id,产品属性,产品属性值,sum(产品数量) as 销量,
(select 产品属性 from 产品表 where 产品id = 表A.产品id)
from 表B
left join 表A on 表B.关联表A的ID = 表A.表ID
@刘宏玺: 不需要group by了么?
@清风飘零: 需要,忘记复制了
@刘宏玺: 带group by的话 sql不是就会报#1242 - Subquery returns more than 1 row 大于一行了么?
@刘宏玺: 好吧 不是group by的问题 加子查询 就会报上面哪个sql错误 怎么解决呢?
@清风飘零: 产品属性值 能不能确定唯一?能的话就把产品换成 产品属性值
反正你必须要能确定唯一
@刘宏玺: 好吧 我在自己研究下吧 麻烦你了 多谢了
group by 的时候加上产品属性自然就分开统计了,1万个属性也没事。
能举个栗子么。。。这2个表关联 group by 查询卡死了。。。
@请风飘零:
Select ProductID, ProductSpecification, sum(Quantity) from Table
group by ProductID, ProductSpecification
通常这样的设计较多见于服装、鞋帽等需要颜色、尺码的商品,
这类系统的设计难度和实施难度比普通的超市进销存高一个数量级,没经验的会以为差不多,
不就加一个属性吗,2分钟就好了。
查询卡死那是另外一个问题了。
设计能力、分析系统复杂度的能力,不是一天就能学会的,
你这明显是接了一个自己能力之外的任务。
如果是公司上班,问问领导,有没有啥技术外的解决方案。
查询卡可以通过
1、视图
2、存储过程
3、减少查询数据量
等方法解决。
@爱编程的大叔: 多谢了。。受教了 根据上面 解决了查询问题 但是速度还是慢 。这个我就跟领导反映下问题了= =不是我能解决的了。