У меня есть таблица инвентаря, в которой перечислены количества в нескольких местах. Я сохраняю значение количества, и теперь мне нужно сохранить «пороговое» значение, и когда я дойду до порога, прекратите продавать продукт. Это просто фактор выдумки, поэтому, когда у людей есть неточные запасы, есть небольшой буфер, чтобы убедиться, что они не совершают продажи.mysql if внутри select с агрегатными функциями
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.
Sum все это, и это 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.
Sum все это, и это 7 - 7 = их 4, но не может теперь 0. LocationA хочет продать.
Есть ли способ вложить внутри, если внутри запроса, так что когда qty-порог местоположения < = 0, то он будет исключен из суммы? Я пытаюсь сделать это в mysql, чтобы сохранить его быстро, нашел хорошую информацию об использовании в select, но объединив его с группой и функциями агрегата, я застрял.
Таблица, которую я запрашиваю, является промежуточной таблицей и может быть изменена. Поэтому я открыт для идей об изменении таблицы, чтобы заставить ее работать. Я просто хочу, чтобы это было быстро, поэтому я не хочу делать другой запрос внутри каждого продукта. Я решил удалить группу, упорядочиваясь по продукту, сохраняя значения в массиве, и когда продукт изменяется через массив с помощью этой логики ... но это также означает гораздо больший цикл и больше используемой памяти. Я надеюсь, что какой-то гений mysql там может протянуть руку и помочь. Благодаря!
Можете ли вы предоставить образцы данных и желаемые результаты? Ваша логика не имеет полного смысла. Что такое «7»? Кроме того, отношения между вашим примером и запросом отсутствуют. , , в запросе указаны «1», «2», «3», но «a» и «b» в описании. –
qty-threshold - это то, что у них есть для продажи. Таким образом, в первом примере это (7 + 9) - (3 + 4) = 9 во втором примере это (7 + 0) - (3 + 4) = 0 и мне хотелось бы игнорировать locationB, чтобы оно было (7) - (3) = 4. – RightClick
Извините, я подумал, что читать примеры проще, используя буквы вокруг чисел. В действительности местоположения являются varchars и могут быть названы 345OFFSITE2. Они не будут жестко закодированы в запросе, они поступают из другой таблицы. Извините, если непоследовательность запутывает, это не моя проблема, просто для контекста. – RightClick