Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从Mysql获取每个组的最小值之和_Php_Mysql_Sum_Min - Fatal编程技术网

Php 从Mysql获取每个组的最小值之和

Php 从Mysql获取每个组的最小值之和,php,mysql,sum,min,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

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

我有以下表格:

产品

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型号1和3 B组最低价格值为20型号,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。 有两个最小值为100的型号,型号1和型号3。我假设它们加起来等于100+100=200

问题a但我只想取最小值,不管这个值存在多少次

问题b同样,我试图得到A组和b组的两个输出之和

但我不知道怎么做。 我想在这个查询中完成它

期望输出

Sum of all groups
     100

有人能告诉我正确的方向吗?

您可以使用以下查询:

选择汇总价格 从…起 选择po.group\U id, MINCASE当pgo.group_id为空时,则price ELSE 0结束为min_price 从乘积p 作为采购订单的内部连接产品概述 在p.product\U id=po.product\U id和p.model\U id=po.model\U id上 左连接产品组可选为po.group\U id=pgo.group\U id上的pgo 按采购订单分组。分组id为t
我不确定我是否理解您的表的键,以及问题所在。 几乎没有问题。 a答案应该是120? b如果产品没有价格,价格是否为空? c如果一个组中有一个产品的价格为空,其他产品的价格为空,是否应将其计算为0? 以下是如何获得每个组的较低价格之和,同时忽略产品组可选:


我想你应该限制1,这样你只能得到一个值?你好,艾哈迈德,我试图在底部的“和p.price=”中的“选择查询”中限制它,但它不起作用。在你的查询中,你在联接中使用了属性_id,但不要在你的结构中提及该列我很抱歉Philipp,这意味着它是model_id。现在要修复它好了,你想在这个查询中解决问题a和b吗?你好,Giorgos,非常感谢你的建议。我会尝试一下,让你知道它是否有效再次感谢Giorgos的帮助。它没有按照我想要的方式工作,但是你的一些查询帮助我解决了这个问题。你好,Diogo,非常感谢你的帮助a答案应该是100。因为正如您在A组中所看到的,有两个模型id为1和3,值为100。但我只想得到最小值一次。在B组中,最小值为20,但由于B组是可选的,如您所见,表product Group optional中有一条记录,因此价格自动设置为0。这就是为什么总价值应该是100而不是120 b。如果产品没有价格,那么价格应该是“0”c是的,它应该被计算为0:正如我所看到的,您的查询工作正常。最棘手的部分是在group设置为optional时将值设置为0。正如您所说,B组将返回最小值20。但是我想把它设为0,因为B是可选的。如果你有一个建议,这将是伟大的。谢谢,阿加尼自己解决了,没问题。谢谢你的帮助。太好了@savvas999。我已经编辑了SQL。请试试这个。您好,我不明白为什么您对可选组的建议不起作用,但我会在第一篇文章中发布我的解决方案,以防有人想知道; 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