我见过半类似的问题,但由于我的数据存储方式,我不知道该怎么做。
销售表:
... | price | amount | weight | special | purchase_date | ...
我希望按日和按月(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)
我不确定我的内容是否接近,但我对群体的工作方式感到有些困惑,因此我不确定如何计算正确答案。
修改 添加了有关特殊功能的详细信息。
答案 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
格式的数据分别分为x
和y
,然后CONVERT()
函数将转换{{1}数据类型为VARCHAR
值以进行计算。
DECIMAL
函数会将月份值转换为月份名称。
MONTHNAME