簡體   English   中英

當我使用左連接和分組時,總和不起作用

[英]sum doesn't work while I use left join and group by

我有兩個表:進口和訂單:我分別附上了這些。 在此輸入圖像描述

在此輸入圖像描述

我想要以下內容:1。導入表中相同product_id的總和2.作為狀態明智的訂單表中相同product_id的總和。

我的查詢是:

SELECT `Import`.*, 
    SUM( case when orders.status = "sold" THEN orders.pieces else 0 end) as total_sell,
    SUM( case when orders.status = "No contact" THEN orders.pieces else 0 end) as no_contact,
    SUM( case when orders.status = "confirmed" THEN orders.pieces else 0 end) as confirmed,
    SUM( case when orders.status = "canceled" THEN orders.pieces else 0 end) as canceled
FROM `amrajegeachi`.`imports` AS `Import`
LEFT JOIN `orders`
    ON `Import`.`product_id` = `orders`.`product_id`
WHERE 1 = 1
GROUP BY `Import`.`id`

和此查詢的結果:

Array
(
    [0] => Array
        (
            [Import] => Array
                (
                    [id] => 1
                    [category_id] => 2
                    [product_id] => 2
                    [amount] => 50
                    [cost] => 8320
                    [comment] => transportation and others cost: 100  
                    [created] => 2015-06-23 19:21:10
                )

            [0] => Array
                (
                    [total_sell] => 10
                    [no_contact] => 1
                    [confirmed] => 2
                    [canceled] => 0
                )

        )

    [1] => Array
        (
            [Import] => Array
                (
                    [id] => 2
                    [category_id] => 2
                    [product_id] => 2
                    [amount] => 15
                    [cost] => 3000
                    [comment] => 
                    [created] => 2015-06-22 18:10:36
                )

            [0] => Array
                (
                    [total_sell] => 10
                    [no_contact] => 1
                    [confirmed] => 2
                    [canceled] => 0
                )

        )

    [2] => Array
        (
            [Import] => Array
                (
                    [id] => 3
                    [category_id] => 2
                    [product_id] => 1
                    [amount] => 15
                    [cost] => 2000
                    [comment] => 
                    [created] => 2015-06-23 19:20:15
                )

            [0] => Array
                (
                    [total_sell] => 10
                    [no_contact] => 0
                    [confirmed] => 0
                    [canceled] => 0
                )

        )

)

我的預期結果是:

Array
(
    [0] => Array
        (
            [Import] => Array
                (
                    [id] => 1
                    [category_id] => 2
                    [product_id] => 2
                    [amount] => 65
                    [cost] => 8320
                    [comment] => transportation and others cost: 100  
                    [created] => 2015-06-23 19:21:10
                )

            [0] => Array
                (
                    [total_sell] => 10
                    [no_contact] => 1
                    [confirmed] => 2
                    [canceled] => 0
                )

        )


    [2] => Array
        (
            [Import] => Array
                (
                    [id] => 3
                    [category_id] => 2
                    [product_id] => 1
                    [amount] => 15
                    [cost] => 2000
                    [comment] => 
                    [created] => 2015-06-23 19:20:15
                )

            [0] => Array
                (
                    [total_sell] => 10
                    [no_contact] => 0
                    [confirmed] => 0
                    [canceled] => 0
                )

        )

)

我怎樣才能做到這一點? 我嘗試過不同的方式,例如:

SELECT `Import`.*, SUM(`Import`.`amount`) as total_import,
    SUM( case when orders.status = "sold" THEN orders.pieces else 0 end) as total_sell,
    SUM( case when orders.status = "No contact" THEN orders.pieces else 0 end) as no_contact,
    SUM( case when orders.status = "confirmed" THEN orders.pieces else 0 end) as confirmed,
    SUM( case when orders.status = "canceled" THEN orders.pieces else 0 end) as canceled
FROM `amrajegeachi`.`imports` AS `Import`
LEFT JOIN `orders`
    ON `Import`.`product_id` = `orders`.`product_id`
WHERE 1 = 1
GROUP BY `Import`.`id`

但沒有運氣:'(

我猜您想要了解每種產品的信息。 如果是這樣,您可以通過幾種方式實現此目的。 這是一個union所有方法:

SELECT product_id, sum(amount) as total_import,
       sum( case when status = 'sold' THEN pieces else 0 end) as total_sell,
       sum( case when status = 'No contact' THEN pieces else 0 end) as no_contact,
       sum( case when status = 'confirmed' THEN pieces else 0 end) as confirmed,
       sum( case when status = 'canceled' THEN pieces else 0 end) as canceled
from ((select i.product_id, amount, NULL as status, NULL as pieces
       from `amrajegeachi`.`imports` i
      ) union all
      (select o.product_id, NULL, o.status, o.pieces
       from `orders` o
      )
     ) io
group by product_id;
SELECT `Import`.*, SUM(`Import`.`amount`) as total_import,
    SUM( case when orders.status = "sold" THEN orders.pieces else 0 end) as total_sell,
    SUM( case when orders.status = "No contact" THEN orders.pieces else 0 end) as no_contact,
    SUM( case when orders.status = "confirmed" THEN orders.pieces else 0 end) as confirmed,
    SUM( case when orders.status = "canceled" THEN orders.pieces else 0 end) as canceled
FROM `amrajegeachi`.`imports` AS `Import`
LEFT JOIN `orders`
    ON `Import`.`product_id` = `orders`.`product_id`
WHERE 1 = 1
GROUP BY `Import`.`id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM