2017-05-03 17 views
-1

私は次のフィールドを持つテーブルを持っています異なる月の基準に基づいて列を合計するMySQLクエリ

Suf_id |カテゴリ|サブカテゴリ|コレクション|ベンダー| quantity_sold |販売|月|年

単一のmysqlクエリで、選択した年の期間に基づいて、過去1ヶ月、最後3ヶ月、最後12ヶ月のquantity_soldと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行取得しています。

+0

持ってどのようなあなたはこれまでに試しましたか? – lebelinoz

+0

投稿を更新しました。私が何を試したかを見てください。 –

+0

申し訳ありませんが、私は尋ねました。 https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-queryを参照してください。 – Strawberry

答えて

0

私はあなたが(:plsはより多くの助けを持っているためにそれらをポストスクリプトとサンプルデータを作成して投稿していなかったので、私はすべてのテストを行うことができませんでした):あなたのクエリこの方法を変更することができると思い

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 
関連する問題