目前业务情况是这样的: 商品 XXX 有 进货价 A、售价 B、实际售价 C (扣去优惠实际付费金额) 现在要统计所有收银单里的商品 XXX 的利润
要求:
if (A == 0) { // 没有设置进货价的,则当它利润是 0,不统计 // 不加入统计 } else { profit = ( 实际售价 C - 进货价 A ) * 数量; sum(profit) // mysql 里的 sum profit_rate = sum(profit) / sum(进货价 A * 数量); //利润率 }
mysql 咋写啊 。。。我日
得在 mysql 里用 IF 吗?写不来
1
tusj 2017-07-27 10:14:49 +08:00
CASE WHEN THEN ELSE END
https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#operator_case |
2
gaolycn 2017-07-27 10:24:41 +08:00 via Android
问的莫名其妙,select sum(C-A) from xxx where A!=0;
我仔细看了问题一遍又一遍,确定楼主就是这个意思啊,难道我理解错了?? |
3
nullen 2017-07-27 10:30:19 +08:00
假设:a 字段是计数字段,b 是可能为空的字段
SELECT SUM(IF(b!='',a,0)) FROM table |
4
ideascf 2017-07-27 12:32:35 +08:00
3 楼正解
|
5
reus 2017-07-27 12:41:29 +08:00
这都不会,也敢让你写?
where 没用过? |
6
demoplayer88 2017-07-27 12:51:51 +08:00 via iPhone
就是判断为 0 不统计的意思嘛? if 直接写就行了啊…
|
7
sunsh217 2017-07-27 13:05:00 +08:00
5 楼说的对,用 where 过滤掉,不过这水准,问题很大啊。
|
8
xfspace 2017-07-27 13:33:09 +08:00 via Android
我日,这都能有工作
|
9
freestyleyooo 2017-07-27 14:25:48 +08:00
我日 很接地气啊
|
10
aksoft 2017-07-27 16:05:29 +08:00
工作和能力并不是直接的,人都有学习的阶段行不?潜力股
|
11
zeraba 2017-07-27 18:31:41 +08:00 via Android
楼主 想一下 一共 4 个字段 进货价 售价 实际售价 数量
假设字段值都正常 (实际售价 - 进货价)/进货价就是你们运营所谓的利润率 数量分子分母都有 抵消了 现在存在进货价没有或者为 0 的情况 直接将这部分设置为和实际售价一样 结果就是利润率为 0 这部分也是运营需要看的 而不是直接 where 筛选 so select 商品 id,case when A = 0 then A = C else A end A,C from 表名 就是你需要统计的清单 再做个查询算下利润率就行 当然你也可以直接在 case when 中算好 |
12
kran 2017-07-27 20:32:06 +08:00 via iPhone
where 并不怎么靠谱,想一下,需要 count 怎么办? 3 楼靠谱
|