Tools
首页
画图
音乐
采集
记事
博客
实验室
登录
lypeng
146
文章
11
分类
46
记事
分类
生活-[23]
Linux-[24]
前端-[9]
数据库-[16]
PHP-[31]
git-[7]
其他-[6]
python-[20]
算法-[4]
React-Native-[4]
中草药-[2]
广告位1
广告位2
首页
/ 数据库
返回列表
记录一个稍微复杂的SQL
阅读:18304
发布:2020-03-05
作者:lypeng
统计各个商家在不同平台(平台2,平台3)的订单数,与订单金额 只统计商家的,加盟商的业绩归所属商家~ 总共涉及三个表: 商家表 seller | id | name | p_seller_id | | ------------ | ------------ | ------------ | | 1 | 商家aa | 0 | | 2 | 商家bb | 0 | | 3 | 加盟商cc | 2 | | 4 | 加盟商dd | 2 | | 5 | 加盟商ee | 2 | 订单表(order) | id | platform | pay_time(暂不考虑) | | ------------ | ------------ | ------------ | | 1 | 2 | 2020-03-05 | | 2 | 3 | 2020-03-05 | | 3 | 3 | 2020-03-05 | | 4 | 3 | 2020-03-05 | | 5 | 2 | 2020-03-05 | 子订单表(son_order) | id | order_id(父订单id) | seller_id(商家id) | p_seller_id(父商家id) | goods_amount(销售金额) | | ------------ | ------------ | ------------ | ------------ | ------------ | | 1 | 1 | 1 | 0 | 111 | | 2 | 2 | 2 | 0 | 222 | | 3 | 3 | 3 | 2 | 333 | | 4 | 4 | 4 | 2 | 444 | | 5 | 5 | 5 | 2 | 555 | 要求,计算各个父商家的订单数与订单金额 要求结果如下: | seller_id | platform | order_num | order_amount | | ------------ | ------------ | ------------ | ------------ | | 1 | 2 | 1 | 111 | | 2 | 2 | 1 | 555 | | 2 | 3 | 3 | 999 | 我的答案: ``` SELECT IF(so.p_seller_id=0,so.seller_id,so.p_seller_id) AS seller_id, o.platform, COUNT(DISTINCT so.id) order_num, SUM(DISTINCT so.goods_amount) order_amount FROM son_order so JOIN seller s ON (so.seller_id=s.id OR so.`p_seller_id`=s.id) JOIN `order` o ON so.order_id=o.id GROUP BY IF(so.p_seller_id=0,so.seller_id,so.p_seller_id),o.platform ``` 知识点: 1. group by里面不能用select定义的别名,因为SQL执行顺序(from > where > group by > select > order by) 2. group by之后,count与sum都会出错,需要加distinct关键字 3. 子订单表可能存在只有加盟商的,没有父类的,所以要用or
------本文结束
感谢阅读------
上一篇:
mysql查询结果直接转储到文件txt或者csv
下一篇:
MySQL教程之concat以及group_concat的用法