你好,
我是使用两个表(销售表,优惠券表 来获取如下字段的值,但是对group by和count(*)的使用不是很熟悉,所以想问,如下语句有什么问题,请大家指教.
select b.p15_promo_id, -- 促销分类
a.p23_id_i, -- 购买商品的顾客号
b.p15_coupon_no, --优惠券号码
b.p15_cond_rate, -- 优惠券打折率
b.p15_cond_amt, -- 优惠券打折金额
b.p15_expire_dt, -- 优惠券截止日期
b.p15_create_dt, -- 优惠券创建日期
a.p23_acode, -- 商店带啊
a.p23_jundate, -- 销售日期
a.p23_before_amt, -- 打折前金额
a.p23_after_amt, -- 打折后最终销售金额
a.p23_amount -- 打折金额
count(*) as qty, -- 使用优惠券购买商品的数量
from pos23_pm a,pos_p15 b
where a.p23_promo_id = b.p15_promo_id
and a.p23_promo_id='PM002976'
and a.p23_coupon_no is not null
group by
b.p15_coupon_no;
------解决思路----------------------
语句是错误的
group by 子句是对查询结果进行分组统计,
如果查询列表中包含列、表达式和分组函数,那么这些列和表达式都要出现在group by 子句中。
以上语句改为:
select b.p15_promo_id, -- 促销分类
a.p23_id_i, -- 购买商品的顾客号
b.p15_coupon_no, --优惠券号码
b.p15_cond_rate, -- 优惠券打折率
b.p15_cond_amt, -- 优惠券打折金额
b.p15_expire_dt, -- 优惠券截止日期
b.p15_create_dt, -- 优惠券创建日期
a.p23_acode, -- 商店带啊
a.p23_jundate, -- 销售日期
a.p23_before_amt, -- 打折前金额
a.p23_after_amt, -- 打折后最终销售金额
a.p23_amount -- 打折金额
count(*) as qty, -- 使用优惠券购买商品的数量
from pos23_pm a,pos_p15 b
where a.p23_promo_id = b.p15_promo_id
and a.p23_promo_id='PM002976'
and a.p23_coupon_no is not null
group by
b.p15_promo_id, -- 促销分类
a.p23_id_i, -- 购买商品的顾客号
b.p15_coupon_no, --优惠券号码
b.p15_cond_rate, -- 优惠券打折率
b.p15_cond_amt, -- 优惠券打折金额
b.p15_expire_dt, -- 优惠券截止日期
b.p15_create_dt, -- 优惠券创建日期
a.p23_acode, -- 商店带啊
a.p23_jundate, -- 销售日期
a.p23_before_amt, -- 打折前金额
a.p23_after_amt, -- 打折后最终销售金额
a.p23_amount; -- 打折金额
这样语句不会报错了,估计也不满足你的查询条件。
count(*) 函数:统计数量,
如select count(*) from A,表示查询A表宗条数,
如select name,count(*) from A group by name ,表示查询A表,按name列分组统计,相同name的总数。
------解决思路----------------------
select b.p15_promo_id, -- 促销分类
a.p23_id_i, -- 购买商品的顾客号
b.p15_coupon_no, --优惠券号码
b.p15_cond_rate, -- 优惠券打折率
b.p15_cond_amt, -- 优惠券打折金额
b.p15_expire_dt, -- 优惠券截止日期
b.p15_create_dt, -- 优惠券创建日期
a.p23_acode, -- 商店带啊
a.p23_jundate, -- 销售日期
a.p23_before_amt, -- 打折前金额
a.p23_after_amt, -- 打折后最终销售金额
a.p23_amount , -- 打折金额
count(*) as qty -- 使用优惠券购买商品的数量
from pos23_pm a,pos_p15 b
where a.p23_promo_id = b.p15_promo_id
and a.p23_promo_id='PM002976'
and a.p23_coupon_no is not null
group by
b.p15_promo_id, -- 促销分类
a.p23_id_i, -- 购买商品的顾客号
b.p15_coupon_no, --优惠券号码
b.p15_cond_rate, -- 优惠券打折率
b.p15_cond_amt, -- 优惠券打折金额
b.p15_expire_dt, -- 优惠券截止日期
b.p15_create_dt, -- 优惠券创建日期
a.p23_acode, -- 商店带啊
a.p23_jundate, -- 销售日期
a.p23_before_amt, -- 打折前金额
a.p23_after_amt, -- 打折后最终销售金额
a.p23_amount; -- 打折金额
改了下逗号位置
------解决思路----------------------
是统计每个优惠卷 共销售了多少件衣服?比如你说的有一个优惠卷是50%的优惠,就是查看所有使用这个优惠卷商品总数?
select b.p15_promo_id, -- 促销分类
a.p23_id_i, -- 购买商品的顾客号
b.p15_coupon_no, --优惠券号码
b.p15_cond_rate, -- 优惠券打折率
b.p15_cond_amt, -- 优惠券打折金额
b.p15_expire_dt, -- 优惠券截止日期
b.p15_create_dt, -- 优惠券创建日期
a.p23_acode, -- 商店带啊
a.p23_jundate, -- 销售日期
a.p23_before_amt, -- 打折前金额
a.p23_after_amt, -- 打折后最终销售金额
a.p23_amount , -- 打折金额
(select count(*) from pos23_pm a,pos_p15 b
where a.p23_promo_id = b.p15_promo_id(+)
and a.p23_promo_id='PM002976'
and a.p23_coupon_no is not null group by p15_coupon_no) as qty --统计购买商品的顾客使用这个优惠卷的总数
from pos23_pm a,pos_p15 b
where a.p23_promo_id = b.p15_promo_id
and a.p23_promo_id='PM002976'
and a.p23_coupon_no is not null;
我这边根据你提供的信息统计:有多少个顾客使用了这个优惠卷的总数;
想要得到商品数量,还要要统计每个顾客使用这个优惠卷买了多少件商品,还需要关联顾客买的商品
------解决思路----------------------
给你个思路 group by查询 select 只能是查询组合函数、group by中出现的字段
然后你自己再思索下吧
------解决思路----------------------
建议百度下group by和count的用法。
都是最简单和最基础的SQL了。