Mysql根据不同的月份条件查询求和列

Mysql根据不同的月份条件查询求和列,mysql,Mysql,我有一个包含以下字段的表 Suf|U id |类别|子类别|收集|供应商|销售数量|销售|月|年 我想在单个mysql查询中,根据所选的年份持续时间,对过去1个月、过去3个月和过去12个月的quantity_Saled和sales列求和 我尝试了以下查询 SELECT `category`, `subcategory`, `collection`, `vendor_id`, (SELECT SUM(quantity_sold) FROM `sales_upload_file

我有一个包含以下字段的表

Suf|U id |类别|子类别|收集|供应商|销售数量|销售|月|年

我想在单个mysql查询中,根据所选的年份持续时间,对过去1个月、过去3个月和过去12个月的quantity_Saled和sales列求和

我尝试了以下查询

SELECT `category`, `subcategory`, `collection`, `vendor_id`, 
   (SELECT SUM(quantity_sold) 
      FROM `sales_upload_file` as s2 
      where file_month = 5 
          and file_year = 2017 
          and s2.`category` = s1.category 
          and s2.`subcategory` = s1.subcategory 
          and s2.`collection` = s1.collection 
          and s2. `vendor_id` = s1.vendor_id) as month_1_sold, 
   (SELECT SUM(sales) 
      FROM `sales_upload_file` as s2 
      where file_month = 5 
         and file_year = 2017 
         and s2.`category` = s1.category 
         and s2.`subcategory` = s1.subcategory 
         and s2.`collection` = s1.collection 
         and s2. `vendor_id` = s1.vendor_id) as month_1_sale, 
   (SELECT SUM(quantity_sold) 
      FROM `sales_upload_file` as s2 
      where file_month <= 5 
         and file_month >= 3 
         and file_year = 2017 
         and s2.`category` = s1.category 
         and s2.`subcategory` = s1.subcategory 
         and s2.`collection` = s1.collection 
         and s2. `vendor_id` = s1.vendor_id) as month_3_sold, 
   (SELECT SUM(sales) 
       FROM `sales_upload_file` as s2 
       where file_month <= 5 
         and file_month >= 3 
         and file_year = 2017 
         and s2.`category` = s1.category 
         and s2.`subcategory` = s1.subcategory 
         and s2.`collection` = s1.collection 
         and s2. `vendor_id` = s1.vendor_id) as month_3_sale, 
   (SELECT SUM(quantity_sold) 
      FROM `sales_upload_file` as s2 
      where file_month <= 5 
         and file_month >= 1 
         and file_year = 2017 
         and s2.`category` = s1.category 
         and s2.`subcategory` = s1.subcategory 
         and s2.`collection` = s1.collection 
         and s2. `vendor_id` = s1.vendor_id 
UNION 

SELECT SUM(quantity_sold) 
   FROM `sales_upload_file` as s2 
   where file_month >= 6 
      and file_month <= 12 
      and file_year = 2016 
      and s2.`category` = s1.category 
      and s2.`subcategory` = s1.subcategory 
      and s2.`collection` = s1.collection 
      and s2. `vendor_id` = s1.vendor_id) as month_12_sold, 
   (SELECT SUM(sales) 
      FROM `sales_upload_file` as s2 
      where file_month <= 5 
         and file_month >= 1 
         and file_year = 2017 
         and s2.`category` = s1.category 
         and s2.`subcategory` = s1.subcategory 
         and s2.`collection` = s1.collection 
         and s2. `vendor_id` = s1.vendor_id 
UNION 

SELECT SUM(sales) 
   FROM `sales_upload_file` as s2 
   where file_month >= 6 
      and file_month <= 12 
      and file_year = 2016 
      and s2.`category` = s1.category 
      and s2.`subcategory` = s1.subcategory 
      and s2.`collection` = s1.collection 
      and s2. `vendor_id` = s1.vendor_id) as month_12_sale 

   FROM `sales_upload_file` as `s1` 
   WHERE `processed` = '1' 
      AND `pc` = '1' GROUP BY `category`, `subcategory`, `collection`, `vendor_id` ORDER BY `category`, `subcategory`, `collection`, `vendor_id`
我收到一个错误子查询返回超过1行


非常感谢您的帮助。

我想您可以这样更改查询,因为您没有发布创建脚本和示例数据,所以我无法进行任何测试:请发布它们以获得更多帮助:

    SELECT s1.category
        ,s1.subcategory
        ,s1.COLLECTION
        ,s1.vendor_id
        , SUM(s2.quantity_sold) AS month_1_sold
        , SUM(s2.sales) AS month_1_sale
        , SUM(s3.quantity_sold) AS month_3_sold
        , SUM(s3.sales) AS month_3_sale
        , SUM(s4.quantity_sold) AS month_12_sold
        , SUM(s4.sales) AS month_12_sale
    FROM sales_upload_file s1
    LEFT JOIN sales_upload_file s2 ON s2.category = s1.category
    AND s2.subcategory = s1.subcategory
    AND s2.COLLECTION = s1.COLLECTION
    AND s2.vendor_id = s1.vendor_id
        AND s2.file_year = 2017 AND s2.file_month = 5
    LEFT JOIN sales_upload_file s3 ON s3.category = s1.category
                AND s3.subcategory = s1.subcategory
                AND s3.COLLECTION = s1.COLLECTION
                AND s3.vendor_id = s1.vendor_id
                AND s3.file_year = 2017 AND s3.file_month >= 3 AND s3.file_month<=5
    LEFT JOIN sales_upload_file s4 ON s4.category = s1.category
                AND s4.subcategory = s1.subcategory
                AND s4.COLLECTION = s1.COLLECTION
                AND s4.vendor_id = s1.vendor_id
                AND ((s4.file_year = 2017 AND s4.file_month >= 1 AND s4.file_month<=5) OR (s4.file_year = 2016 AND s4.file_month >= 6 AND s4.file_month<=12))
    WHERE s1.processed = '1'
                AND s1.pc = '1'
    GROUP BY s1.category
                ,s1.subcategory
                ,s1.COLLECTION
                ,s1.vendor_id
    ORDER BY s1.category
                ,s1.subcategory
                ,s1.COLLECTION
                ,s1.vendor_id

我已经更新了我的帖子。请刷新以查看我尝试过的内容。抱歉,我们问了。看,我将坐在这里,直到等待编辑被审查,所以我重新格式化这个查询!我有一种理解这个世界的自然欲望。