簡體   English   中英

從MySQL獲取每個組中的最小值的總和

[英]Get sum of min values in each group from Mysql

我正在嘗試檢索某些型號的最低價格。 每個模型都屬於某個產品組。

我有以下表格:

產品

model_id   product_id   price
    1              1         100
    2              1         120
    3              1         100
    4              1         200
    5              1         250
   10              1         20
   11              1         50
   12              1         50

產品總覽

model_id   product_id   group_id
    1              1           A
    2              1           A
    3              1           A
    4              1           A
    5              1           A
   10              1           B
   11              1           B
   12              1           B

產品組可選

group_id   product_id
   B            1

某些組可能是可選的,這意味着除非會員另有選擇,否則價格將為零。

因此,在上面的示例中,我想從每個組中獲取最低價格的總和。 我們有A組和B組兩個組。A組的最低價格為100(model_id 1和3),B組的最低價格為20(model_id 10),但是由於B組是可選的,因此最低價格為0。

最小值的總和:100(A組)+ 0(B組)= 100

到目前為止,我的代碼:

SELECT po.group_id,
CASE WHEN
  ((SELECT COUNT(*) FROM product_group_optional pgo
    WHERE po.group_id = group_id AND po.product_id = 1 AND po.product_id = product_id) >= 1)
  THEN SUM(0)
  ELSE SUM(p.price)
  END AS sum_price   
FROM product_overview po, product p
WHERE po.product_id = 1
AND po.model_id = p.model_id
AND p.price = (
    SELECT MIN(p2.price)
        FROM product p2, product_overview po2
        WHERE po2.product_id = 1 AND po2.group_id = po.group_id
        AND po2.model_id = p2.model_id
    )
GROUP BY po.group_id

輸出:

group_id    sum_price
    A         200
    B          0

問題是,對於A組,我得到200,但應該為100。有2個模型的最小值為100,分別為模型1和3。我假設它們的總和為100 + 100 = 200。

問題a)但是,無論此值存在多少次,我都想取最小值。

問題b)另外,我正在嘗試獲取A組和B組這兩個輸出SUM的總和。

但是我不確定該怎么做。 我希望在此查詢中完成。

所需的輸出

Sum of all groups
     100

有人可以引導我朝正確的方向嗎?

您可以使用以下查詢:

SELECT SUM(min_price)
FROM (
  SELECT po.group_id, 
         MIN(CASE WHEN pgo.group_id IS NULL THEN price ELSE 0 END) AS min_price
  FROM Product AS p
  INNER JOIN Product_overview AS po 
     ON p.product_id = po.product_id AND p.model_id = po.model_id
  LEFT JOIN Product_group_optional AS pgo ON po.group_id = pgo.group_id
  GROUP BY po.group_id) AS t

我不確定我是否了解您的表的鍵以及問題。
有幾個問題。
a)答案應該是120?
b)如果產品沒有價格,價格是否為空?
c)如果某個組中有一個產品的價格為空,而其他產品的價格為零,是否應將其計為0?

以下是在一段時間內忽略product_group_optional的情況下,如何獲得每個組的較低價格的總和:

SELECT t2.group_id, sum(t2.new_price)
FROM
(
    SELECT t.group_id, t.new_price
    FROM
    (
        SELECT po.group_id, if(ifnull(pgo.product_id, true), p.price, 0) as new_price
        FROM product p, product_overview po
            LEFT JOIN product_group_optional pgo ON po.group_id = pgo.group_id
        WHERE p.model_id = po.model_id
        ORDER by po.group_id, new_price
    ) t
    GROUP BY t.group_id
) t2

暫無
暫無

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

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