php - 从Mysql获取每组最小值的总和

标签 php mysql sum min

我正在尝试检索某些型号的最低价格。 每个模型都属于某个产品的某个组。

我有下表:

产品

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

关于php - 从Mysql获取每组最小值的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38482532/

相关文章:

php - RewriteRule 不适用于生产服务器

javascript - WordPress 网站 : homepage redirects to "login" page (non-existent now)

python - 在 Pandas Dataframe 单元格中查找 [Python 列表] 的匹配值之和?

MYSQL INSERT IF SUM > CONSTANT

php - 根据另一个数据库字段的数据自动填充数据库字段 50%

xml - 如何在Odoo中自定义 TreeView 的求和函数?

php - 如何在 CentOS 8 中安装 php-curl?

PHP CodeIgniter WHERE 子句语句

mysql - 选择在已知日期范围内的行

java - Spring Roo : Deleting from DB?