繁体   English   中英

SQL对同一查询中的两个值求和

[英]SQL Sum two values within same query

美好的一天,

我有一个包含3列的表。 日期,存储,直售。 每天都会为每家商店及其前一天的销售额创建新记录。

我想做的是生成一个结果集,该结果集既包含每个位置的当月最新销售额,也包含过去一年相同的MTD销售额。

我可以通过使用两个完全独立的查询和结果集来完成此操作,但是出于报表目的,我试图将它们包含在同一查询中。

这是我目前的两个查询,它们工作正常:

迄今为止的上个月:

     SELECT SUM(summ_sales_daily.straight_sales), store_master.name 
     FROM
     store_master 
     INNER JOIN summ_sales_daily ON store_master.unit = summ_sales_daily.store 
      WHERE YEAR(date)=YEAR(DATE_SUB(NOW(), INTERVAL 1 YEAR)) AND MONTH(date)=MONTH(NOW())
     GROUP BY summ_sales_daily.store ORDER BY summ_sales_daily.store

迄今为止的本月月份:

     SELECT SUM(summ_sales_daily.straight_sales), store_master.name 
     FROM
     store_master 
     INNER JOIN summ_sales_daily ON store_master.unit = summ_sales_daily.store 
     WHERE YEAR(date)=YEAR(NOW()) AND MONTH(date)=MONTH(NOW()) 
     GROUP BY summ_sales_daily.store ORDER BY summ_sales_daily.store

我希望这些结果以相同的结果返回当前和以前的MTD以及商店名称(因此加入)

任何帮助都是极好的!

使用MariaDB

您可以使用条件聚合,也可以将不同的条件移动到sum函数中的case表达式中:

SELECT 
    store_master.name
    , SUM(CASE WHEN YEAR(date)=YEAR(DATE_SUB(NOW(), INTERVAL 1 YEAR)) THEN summ_sales_daily.straight_sales ELSE 0 END) last_year_sales
    , SUM(CASE WHEN YEAR(date)=YEAR(NOW()) THEN summ_sales_daily.straight_sales ELSE 0 END) current_year_sales
FROM store_master 
INNER JOIN summ_sales_daily ON store_master.unit = summ_sales_daily.store 
WHERE MONTH(date)=MONTH(NOW())
GROUP BY summ_sales_daily.store 
ORDER BY summ_sales_daily.store;

或者,您可以在与之连接的几个派生表中计算两个不同的值:

SELECT 
  store_master.name, 
  last_year.sales as previous_mtd, 
  current_year.sales as current_mtd
FROM store_master 
LEFT JOIN (
    SELECT store, SUM(straight_sales) sales
    FROM summ_sales_daily
    WHERE YEAR(date)=YEAR(DATE_SUB(NOW(), INTERVAL 1 YEAR)) AND MONTH(date)=MONTH(NOW())
    GROUP BY store 
) last_year ON store_master.unit = last_year.store 
LEFT JOIN (
    SELECT store, SUM(summ_sales_daily.straight_sales) sales
    FROM summ_sales_daily 
    WHERE YEAR(date)=YEAR(NOW()) AND MONTH(date)=MONTH(NOW()) 
    GROUP BY store 
) current_year ON store_master.unit = current_year.store ;

示例SQL提琴

第一个解决方案可能会执行得更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM