在mySQL中获取每月/每月的每日/每月销售额

时间:2017-09-16 19:21:35

标签: mysql sql

我见过半类似的问题,但由于我的数据存储方式,我不知道该怎么做。

销售表:

... | price | amount | weight | special | purchase_date | ...
  • 价格是每1件或1磅的成本。
  • 如果物品按英镑收费,则金额为空。
  • 如果某个项目没有按英镑收费,则重量为空。
  • 如果没有任何或者x / y,则特殊为空,例如,总共3美元的2存储为' 2/3'。如果物品按金额收费,则只能有特殊情况。当商品有特价时,表示该商品以特价出售。所以应该计算成本(金额/ x)* y。

我希望按日和按月(2个单独的查询)获得总利润

现在无视特价和获得每月利润,我试过:

select month(purchase_date) as month, sum(price * amount) as profit 
from sales 
where special is null and weight is null 
group by month(purchase_date) 

union 

select month(purchase_date) as month, sum(price * weight) as profit 
from sales 
where special is null and amount is null 
group by month(purchase_date)

我不确定我的内容是否接近,但我对群体的工作方式感到有些困惑,因此我不确定如何计算正确答案。

修改 添加了有关特殊功能的详细信息。

4 个答案:

答案 0 :(得分:0)

试一试。它不需要使用工会。

SELECT 
    MONTH(`purchase_date`) AS `month`,
    SUM(IF(`amount` IS NULL,`price` * `weight`,`price` * `amount`)) as `profit`
FROM `sales`
GROUP BY month(`purchase_date`);

答案 1 :(得分:0)

你也可以有一个查询。使用像SUM()这样的聚合函数时,GROUP BY用于按指定的列获取记录集合。

A & B & C & D

答案 2 :(得分:0)

管理3个选项时,您可以使用CASE。 (第3个选项不清楚,因此将其指定为2/3)

  select 
          month(purchase_date) as month,
           sum(case when amount is null then price * weight
               when weight is null then  price * weight  
               when special is null then 2/3 
               end) as profit
  from sales 
  group by month(purchase_date) 

答案 3 :(得分:0)

试试这个:

此处SUBSTRING_INDEX(SUBSTRING_INDEX(specials, '/', 1), '/', -1)功能会将x/y格式的数据分别分为xy,然后CONVERT()函数将转换{{1}数据类型为VARCHAR值以进行计算。

DECIMAL函数会将月份值转换为月份名称。

MONTHNAME