如何找到今年2月份销售额增加20%以上的部门编号(与今年相比,将使用年份(CURDATE())而不是“2012”)与去年2月相比前一年。结果表应该只有一列,其中包含的销售额增加了20%的部门编号。
如果去年的febraury没有“部门2”的销售但是这个febraury的销售,那么0 * 1.2 = 0所以结果不会显示“部门2”。如果去年2月的“第3部”出售了一件商品,并且今年2月份卖出了两件商品,这将是1.5增加,超过1.2,所以结果应显示“部门3”。如果只有3个部门,最多只能有3个部门。
部门2没有出现,因为去年2月有3次销售,2月有1次销售。部门4没有出现,因为去年2月没有销售,所以在数学0 * 1.2 = 0的情况下,所以尽管有这个febraury有销售,但部门4不会出现。
提前谢谢你,希望这足够详细。
答案 0 :(得分:1)
这使用 MAKEDATE()
功能来赢取一年的第一天,然后添加适当的月间隔来计算(二月)月的开始和下一个月的开始日期月。
将?
替换为1表示1月,2表示2月表示等等:
SELECT
this_year.departement_no
FROM
( SELECT departement_no, COUNT(*) AS num_sales
FROM department
WHERE date >= MAKEDATE( YEAR(NOW()), 1) + INTERVAL (?-1) MONTH
AND date < MAKEDATE( YEAR(NOW()), 1) + INTERVAL (?) MONTH
GROUP BY departement_no
) this_year
LEFT JOIN
( SELECT departement_no, COUNT(*) AS num_sales
FROM department
WHERE date >= MAKEDATE( YEAR(NOW())-1, 1) + INTERVAL (?-1) MONTH
AND date < MAKEDATE( YEAR(NOW())-1, 1) + INTERVAL (?) MONTH
GROUP BY departement_no
) last_year
ON last_year.departement_no = this_year.departement_no
WHERE
this_year.num_sales > 1.2 * COALESCE(last_year.num_sales, 0) ;
如果您希望(作为您相当奇怪的要求)不显示今年2月销售并且去年没有销售的部门,请删除COALESCE()
功能。您还可以将LEFT
加入更改为INNER
加入:
WHERE
this_year.num_sales > 1.2 * last_year.num_sales ;
答案 1 :(得分:0)
尝试使用having
,如下所示:
select departement_no
from department
group by departement_no
having sum(case date_format(date, '%m%Y')
when CONCAT('02',YEAR(CURDATE())) then 1 else 0 end)
>
1.2 * sum(case date_form(date, '%m%Y')
when CONCAT('02',YEAR(DATE_SUB(CURDATE(),INTERVAL 1 Year)))
then 1 else 0 end)
AND
sum(case date_form(date, '%m%Y')
when CONCAT('02',YEAR(DATE_SUB(CURDATE(),INTERVAL 1 Year)))
then 1 else 0 end) > 0