Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.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
mysql如果在内部使用聚合函数选择_Mysql_Sql_Performance_If Statement_Aggregate Functions - Fatal编程技术网

mysql如果在内部使用聚合函数选择

mysql如果在内部使用聚合函数选择,mysql,sql,performance,if-statement,aggregate-functions,Mysql,Sql,Performance,If Statement,Aggregate Functions,我有一个库存表,列出了多个地点的数量。我保留一个数量值,现在我必须保留一个“阈值”,当我达到阈值时,停止销售产品。这只是一个捏造的因素,所以当人们有不准确的库存时,有一点缓冲,以确保他们不会过度承诺销售 SELECT product, sum(quantity) as pooled, max(quantity) as maxincart FROM `inventory` WHERE location=1 OR location=2 OR location=3 GROUP by product

我有一个库存表,列出了多个地点的数量。我保留一个数量值,现在我必须保留一个“阈值”,当我达到阈值时,停止销售产品。这只是一个捏造的因素,所以当人们有不准确的库存时,有一点缓冲,以确保他们不会过度承诺销售

SELECT product, sum(quantity) as pooled, max(quantity) as maxincart FROM `inventory` WHERE location=1 OR location=2 OR location=3 GROUP by product
我尝试过的查询的主要问题是,它们将我的所有位置相加。这在阈值之前很好。现在,我宁愿忽略的位置都包含在我的求和中,我希望使用IF将它们从聚合函数中删除

Sometimes it works fine. 
locationA has 7 and a threshold of 3.
locationB has 9 and a threshold of 4.
总而言之,结果是16比7= 9行

But then there are situations like this
locationA has 7 and a threshold of 3.
locationB has 0 and a threshold of 4. 
加起来,它是7-7=0。LocationA想卖掉他们的4台,但现在不行


有没有一种方法可以在查询中嵌套if,这样当某个位置的数量阈值时,我很难理解这个问题,但我认为您的解决方案是按位置(位置/产品?)预聚合,然后再次聚合。大概是这样的:

SELECT product,
       sum(greatest(quantity - threshhold, 0))
FROM (SELECT location, product, sum(quantity) as quantity, max(threshhold) as threshhold
      FROM `inventory`
      WHERE location IN (1, 2, 3) 
      GROUP by location, product
     ) lp
GROUP BY product;

我发现很难理解这个问题,但我认为您的解决方案是按位置(位置/产品?)预聚合,然后再次聚合。大概是这样的:

SELECT product,
       sum(greatest(quantity - threshhold, 0))
FROM (SELECT location, product, sum(quantity) as quantity, max(threshhold) as threshhold
      FROM `inventory`
      WHERE location IN (1, 2, 3) 
      GROUP by location, product
     ) lp
GROUP BY product;

我发现很难理解这个问题,但我认为您的解决方案是按位置(位置/产品?)预聚合,然后再次聚合。大概是这样的:

SELECT product,
       sum(greatest(quantity - threshhold, 0))
FROM (SELECT location, product, sum(quantity) as quantity, max(threshhold) as threshhold
      FROM `inventory`
      WHERE location IN (1, 2, 3) 
      GROUP by location, product
     ) lp
GROUP BY product;

我发现很难理解这个问题,但我认为您的解决方案是按位置(位置/产品?)预聚合,然后再次聚合。大概是这样的:

SELECT product,
       sum(greatest(quantity - threshhold, 0))
FROM (SELECT location, product, sum(quantity) as quantity, max(threshhold) as threshhold
      FROM `inventory`
      WHERE location IN (1, 2, 3) 
      GROUP by location, product
     ) lp
GROUP BY product;


你能提供一些样本数据和期望的结果吗?你的逻辑不完全合理。什么是“-7”?此外,示例和查询之间的关系不存在。位置在查询中为“1”、“2”、“3”,但在描述中为“a”和“b”。数量阈值是它们可供销售的数量。在第一个例子中,它是(7+9)-(3+4)=9,在第二个例子中,它是(7+0)-(3+4)=0,我希望我可以忽略位置B,所以它将是(7)-(3)=4。对不起,我想通过在数字周围使用字母来阅读示例会更容易。实际上,这些地点都是瓦查尔,可以命名为345OFFSITE2。它们不会硬编码到查询中,它们来自另一个表。很抱歉,如果不一致性令人困惑,它们不是我的问题,只是为了上下文。您能提供一些示例数据和期望的结果吗?你的逻辑不完全合理。什么是“-7”?此外,示例和查询之间的关系不存在。位置在查询中为“1”、“2”、“3”,但在描述中为“a”和“b”。数量阈值是它们可供销售的数量。在第一个例子中,它是(7+9)-(3+4)=9,在第二个例子中,它是(7+0)-(3+4)=0,我希望我可以忽略位置B,所以它将是(7)-(3)=4。对不起,我想通过在数字周围使用字母来阅读示例会更容易。实际上,这些地点都是瓦查尔,可以命名为345OFFSITE2。它们不会硬编码到查询中,它们来自另一个表。很抱歉,如果不一致性令人困惑,它们不是我的问题,只是为了上下文。您能提供一些示例数据和期望的结果吗?你的逻辑不完全合理。什么是“-7”?此外,示例和查询之间的关系不存在。位置在查询中为“1”、“2”、“3”,但在描述中为“a”和“b”。数量阈值是它们可供销售的数量。在第一个例子中,它是(7+9)-(3+4)=9,在第二个例子中,它是(7+0)-(3+4)=0,我希望我可以忽略位置B,所以它将是(7)-(3)=4。对不起,我想通过在数字周围使用字母来阅读示例会更容易。实际上,这些地点都是瓦查尔,可以命名为345OFFSITE2。它们不会硬编码到查询中,它们来自另一个表。很抱歉,如果不一致性令人困惑,它们不是我的问题,只是为了上下文。您能提供一些示例数据和期望的结果吗?你的逻辑不完全合理。什么是“-7”?此外,示例和查询之间的关系不存在。位置在查询中为“1”、“2”、“3”,但在描述中为“a”和“b”。数量阈值是它们可供销售的数量。在第一个例子中,它是(7+9)-(3+4)=9,在第二个例子中,它是(7+0)-(3+4)=0,我希望我可以忽略位置B,所以它将是(7)-(3)=4。对不起,我想通过在数字周围使用字母来阅读示例会更容易。实际上,这些地点都是瓦查尔,可以命名为345OFFSITE2。它们不会硬编码到查询中,它们来自另一个表。抱歉,如果不一致性令人困惑,它们不是我的问题,只是为了上下文。这就是我所希望的mysql天才。这似乎是在正确的轨道上。我将尝试一下并返回奖励积分,谢谢!是的,就是这样。我需要在我的内部分组select中使用一些if来处理有问题的情况,正如我提到的,位置来自另一个表。但分组是我所需要的正确方向的推动。谢谢这就是我所希望的mysql天才。这似乎是在正确的轨道上。我将尝试一下并返回奖励积分,谢谢!是的,就是这样。我需要在我的内部分组select中使用一些if来处理有问题的情况,正如我提到的,位置来自另一个表。但分组是我所需要的正确方向的推动。谢谢这就是我所希望的mysql天才。这似乎是在正确的轨道上。我将尝试一下并返回奖励积分,谢谢!是的,就是这样。我需要在我的内部分组select中使用一些if来处理有问题的情况,正如我提到的,位置来自另一个表。但分组是我所需要的正确方向的推动。谢谢这就是我所希望的mysql天才。这似乎是在正确的轨道上。我会给它一个tr